精华内容
下载资源
问答
  • 3.表定义基本形式:createtable 【if not exists】 表名 (字段列表 【,索引或约束列表】) 【表选项列表】;或:createtable 【if not ...字段的定义一个字段的定义形式为:字段名 字段类型 【字段属性1 字段属...

    3.表定义

    基本形式:

    create  table  【if not exists】 表名 ( 字段列表 【,索引或约束列表】) 【表选项列表】;

    或:

    create  table  【if not exists】 表名 (

    字段1,

    字段2,

    ....

    【,索引或约束1

    ,索引或约束1

    ......】

    )

    【表选项1,表选项2,..... 】;

    字段的定义

    一个字段的定义形式为:

    字段名  字段类型  【字段属性1  字段属性2   字段属性3  ...... 】

    说明:

    1,字段属性列表表示可以有多个字段属性,期间用 空格 隔开。

    2,需要什么属性由具体数据需求决定

    3,有如下属性可用:

    a: auto_increment:自增长值,用于整数类型,而且必须是一个“key”(就下面2个)

    b: primary key : 设置为主键,就是通过该字段的值,可以唯一确定一行数据;并且默认不为空

    c: unique  key: 唯一键,设定该字段的值是唯一的,不可重复的,但可以为空。

    d: not  null:设定为不为空

    e: default  默认值:设定默认值,则如果插入数据时,该字段没有给值,就使用它。

    f: comment  ‘字段的说明文字’。

    create table tab_shuxing(

    id int auto_increment primary key,

    user_name varchar(20) unique key not null comment '用户名',

    user_pass char(32) comment '密码,使用md5加密',

    age tinyint unsigned default 18 comment '年龄'

    );

    展开全文
  • mysql 日期索引问题

    万次阅读 2018-07-02 21:05:00
    日期类型可以直接和string格式的字符串比较 select * from xxx where event_time>'2018-06-02' 可以使用索引, mysql默认会把后面的字符串转成date类型。可以使用between and select * from xxx where date...

     

    日期类型可以直接和string格式的字符串比较

    select * from xxx where event_time>'2018-06-02' 可以使用索引, mysql默认会把后面的字符串转成date类型。可以使用between and

    select * from xxx where date(event_time)>'2018-06-02'   不能使用索引

    如果时间戳日期和时间都要比较, 最好使用两个字段保存这个时间戳, 这样可以利用索引

    select * from xxx where event_time>1239237428734; --  使用错误, 不能这么用。可以使用from_unixtime()将数字转成日期类型

     

     

     将date和time合并成一个datetime

    select str_to_date(concat(ICDate,' ',ICTime),'%m/%d/%y %h:%i:%s %s')   from XXXX

     

    参考: https://stackoverflow.com/questions/2758486/mysql-compare-date-string-with-string-from-datetime-field

     

     

    其他索引总结:

    where条件等号两边字段类型不同,不走索引

    like 'XXX%' 走索引, '%XXX%'不走索引

    对字段进行函数运算不走索引

    组合索引 只使用后面的字段不走索引,使用前后的字段走索引. 第一个字段有参于(而且字段类型匹配 没有函数运算),那么会走索引, 第一个字段可以在sql中的任意位置

     组合索引遇到第一个不等值条件 即中断后面字段使用索引

     字段类型不匹配,不走索引

     

     示例:

    name varchar, addr varchar, age int。 创建组合索引为name + addr + age

    select * from t_user where name like '123%' and age>19;  走索引 type=range

    select * from t_user where age>19 and name like '123%' ;  走索引 type=range

    select * from t_user where name =123 不走索引 type=all

    select * from t_user where name='123' 走索引 type=ref

    select * from t_user where addr like '上城%' and age>30; 不走索引 type=all

     

    explain 是否使用了索引

    type=ALL是全表扫描

    只要不是ALL, 都能使用索引,只是使用索引的方式不同,性能也有差异==>依次从好到差:system,const,eq_ref,ref,fulltext,ref_or_null,unique_subquery,index_subquery,range,index_merge,index,ALL

    关于explain各个字段的解释:https://www.cnblogs.com/david97/p/8072164.html

     

    索引不是越多越好, 两个index进行merge有时还不如只使用一个index

    组合索引创建的依据:select distinct(xxx)/count(*) 值越大说明区分度越高 组合索引的价值越高 

    什么时候创建组合索引?  单列上查询出来的数据量都很大,但是两个组合查询的结果很小 ,此时创建组合索引就比较有意义

     (原始的离线度都小,组合的离散度会大???)    0.8*0.8=0.64       0.8*0.5=0.4    如果整体的数据量级别很大,也有点效果

     

     

    索引的类型

     BTREE的时间复杂度: https://blog.csdn.net/weixin_38399962/article/details/79409118

     

    orderby 是否使用索引

    https://my.oschina.net/u/912810/blog/325177

    orderby用到的索引和where中的索引如果一致, 可以提升不少性能

     

     

    字符类型的索引需要指定长度

    ALTER TABLE t_yyy ADD INDEX `xxx` (`request_type` ASC, `request_param`(15) ASC);

     

    转载于:https://www.cnblogs.com/yszzu/p/9255769.html

    展开全文
  • mysql between 日期索引 索引问题-日期索引使用表结构:dep_datedeparr联合索引: ind_coll_date_route(dep_date ,dep,arr)这两天发现原来的查询效率慢了,使用explain 查看,居然没有使用索引,我的索引日期类型...

    Mysql: mysql between 日期索引 索引问题-日期索引使用

    表结构:

    dep_date

    dep

    arr

    联合索引: ind_coll_date_route  (dep_date ,dep,arr)

    这两天发现原来的查询效率慢了,使用explain 查看,居然没有使用索引,

    我的索引是日期类型的,首先想到的是mysql对日期类型的索引的处理机制是不是不同,在where条件里试了几种,发现效果都差不多,

    where dep_date >= ‘20161121’

    where dep_date  >= ‘2016-11-21’

    where dep_date  between ‘2016-11-01’ and ‘2016-11-21’

    还有各种函数,最后发现结论都是一样的,在baidu上查询也没有有价值的内容。

    最后发现了一些规律,但不知道是否有普遍性,即:

    在查询数据条数约占总条数五分之一以下时能够使用到索引,但超过五分之一时,则使用全表扫描了。

    试了多张表,均是这个结论, 所以想这个五分之一应该是在某一个地方设置的,或者是系统默认在查询优化时的一个经验值,在以后的处理的进修引起注意。

    解决办法:

    强制走索引

    SELECT *

    FROM `table_xxx`

    FORCE INDEX ( ind_coll_date_route )

    WHERE

    dep_date

    BETWEEN ‘2017-12-01‘

    AND ‘2017-12-30‘

    原文:http://www.cnblogs.com/achengmu/p/8010777.html

    展开全文
  • 表结构: +-------------+----------+------+-----+---------+----------------+ | Field ... +----------+ | count(*) | +----------+ | 15990 | +----------+ 那么,无论我放置什么日期,该如何确保MySQL将使用索引

    表结构:

    +-------------+----------+------+-----+---------+----------------+

    | Field | Type | Null | Key | Default | Extra |

    +-------------+----------+------+-----+---------+----------------+

    | id | int(11) | NO | PRI | NULL | auto_increment |

    | total | int(11) | YES | | NULL | |

    | thedatetime | datetime | YES | MUL | NULL | |

    +-------------+----------+------+-----+---------+----------------+

    总行数: 137967

    mysql> explain select * from out where thedatetime <= NOW();

    +----+-------------+-------------+------+---------------+------+---------+------+--------+-------------+

    | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

    +----+-------------+-------------+------+---------------+------+---------+------+--------+-------------+

    | 1 | SIMPLE | out | ALL | thedatetime | NULL | NULL | NULL | 137967 | Using where |

    +----+-------------+-------------+------+---------------+------+---------+------+--------+-------------+

    带有更多表联接的真实查询要更长得多,关键是,我无法使表使用datetime索引。如果要选择特定日期之前的所有数据,这对我来说将很难。但是,我注意到,如果选择较小的数据子集,则可以使MySQL使用索引。

    mysql> explain select * from out where thedatetime <= '2008-01-01';

    +----+-------------+-------------+-------+---------------+-------------+---------+------+-------+-------------+

    | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

    +----+-------------+-------------+-------+---------------+-------------+---------+------+-------+-------------+

    | 1 | SIMPLE | out | range | thedatetime | thedatetime | 9 | NULL | 15826 | Using where |

    +----+-------------+-------------+-------+---------------+-------------+---------+------+-------+-------------+

    mysql> select count(*) from out where thedatetime <= '2008-01-01';

    +----------+

    | count(*) |

    +----------+

    | 15990 |

    +----------+

    那么,无论我放置什么日期,该如何确保MySQL将使用索引?

    展开全文
  • mysql between 日期索引 索引问题-日期索引使用表结构:dep_datedeparr联合索引: ind_coll_date_route(dep_date ,dep,arr)这两天发现原来的查询效率慢了,使用explain 查看,居然没有使用索引,我的索引日期类型...
  • MySql索引类型

    万次阅读 2018-07-04 22:15:19
    Mysql支持哪几种索引索引是在MySql的存储引擎层中实现的,而不是在服务器层从数据结构角度1、B+树索引(O(log(n))):关于B+树索引,可以参考 MySQL索引背后的数据结构及算法原理BTREE在MyISAM里的形式和Innodb稍有...
  • 如何在DATETIME字段的日期部分创建索引mysql> SHOW COLUMNS FROM transactionlist;+-------------------+------------------+------+-----+---------+----------------+| Field | Type | Null | Key |...
  • mysql日期范围查询(避免索引失效)

    千次阅读 2021-06-30 17:58:06
    查询条件实现: >=(大于等于) 开始时间的00:00:00 < (小于)结束时间后一天的00:00:00 1. yyyy-MM-dd 格式,eg: 2020-06-30 ...= DATE_FORMAT('2020-06-30','%Y-%m-%d') ...2.yyyy-MM-dd HH...
  •  关于MySQL索引的好处,如果正确合理设计并且使用索引MySQL是一辆兰博基尼的话,那么没有设计和使用索引MySQL就是一个人力三轮车。对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型网站单日就...
  • 【踩坑】MySQL时间索引失效

    千次阅读 2021-01-19 21:59:01
    【踩坑】MySQL时间索引失效发布时间:2018-08-18 17:52,浏览次数:458, 标签:MySQL项目中查时间数据段数据时,发现查询时间很长,RDS查了一下执行计划:各列解析说明:id:表示执行的顺序,id的值相同时,执行顺序...
  • 数据库:MySQL,版本:5.1.45查询语句1:select id, settlement_begin_time , settlement_end_time from mkt_vendor_settlement_brief where settlement_begin_time >= '2017-09-01 00:00:00.0' and settlement_...
  • mysql 索引类型以及使用场景

    万次阅读 2018-07-10 10:44:11
    关于MySQL索引的好处,如果正确合理设计并且使用索引MySQL是一辆兰博基尼的话,那么没有设计和使用索引MySQL就是一个人力三轮车。对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型网站单日就可能...
  • 这两天有个非常强烈的感觉就是自己在一些特别的情况下还是hold不住,脑子easy放空或者说一下子不知道怎么去分析问题了,比方,问“hash和btree索引的差别”,这非常难吗。仅仅要掌握了这两种数据结构稍加分析就能...
  • MySql性能调优(一)字段类型的选取之时间类型
  • MySQL字段类型转换引发的索引失效

    千次阅读 2019-08-20 16:20:42
    文章目录概述测试数据索引问题date与datetime字段类型转换导致的索引失效总结 概述 最近发现一个有趣的SQL优化场景,分享一下 测试数据 表结构 CREATE TABLE `news_webpage` ( `id` int(11) NOT NULL AUTO_...
  • 一、Mysql数据类型:1、数值类型:整数类型:使用unsigned修饰时,只取正值,数值不够指定宽度时,在左边补空格整数类型包括:tinyint,smallint,int等浮点型: (5,2)总长度和小数点后的长度包括:float,double,...
  • MySQL 日期类型函数及使用

    千次阅读 2021-01-20 20:16:07
    1 MySQL 数据库中有五种与日期时间有关的数据类型,各种日期数据类型所占空间如下图所示:2 datetime 与 datedatetime 占用8字节,是占用空间最多的一种日期格式。它显示日期,同时也显示时间。5.5及以前的版本不...
  • 如何在DATETIME字段的日期部分创建索引mysql> SHOW COLUMNS FROM transactionlist;+-------------------+------------------+------+-----+---------+----------------+| Field | Type | Null | Key |...
  • MYSQL时间范围查询索引失效

    千次阅读 2021-03-03 21:04:52
    主要的查询条件就是时间,每天导入数据库的数据大概几万条,页面的查询范围最多限制在1个月,算下来1个月的数据量最多有300w,功能开发完后自己做了100多万的测试数据,并在作为查询条件的时间字段上加了索引,但是...
  • Mysql: mysql between 日期索引 ...这两天发现原来的查询效率慢了,使用explain 查看,居然没有使用索引, 我的索引日期类型的,首先想到的是mysql日期类型索引的处理机制是不是不同,在where条件里试了几种...
  • Mysql 索引问题-日期索引使用

    万次阅读 2016-11-24 18:02:48
    我的索引日期类型的,首先想到的是mysql日期类型索引的处理机制是不是不同,在where条件里试了几种,发现效果都差不多, where dayid >= ‘20161121’ where dayid >= ‘2016-11-21’ where dayid ...
  • 2. 建立索引之后,查询速度快 3. 条件范围搜索可以使用使用between 4. 不能使用mysql提供的时间函数 结论:适合需要进行大量时间范围查询的数据表 datetime(javaBean中用Date类型) 1. 占用8个字节 2. 允许为...
  • 日期范围查询的SQL索引

    千次阅读 2021-01-19 20:14:54
    几天来,我一直在努力提高我的数据库的性能,并且有些问题我仍然对SQL Server数据库中的索引感到困惑.我会尽量提供尽可能丰富的信息.我的数据库目前包含大约10万行并且将继续增长,因此我正在努力寻找一种方法来使其更...
  • DAYOFWEEK(date) 返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。 mysql> select DAYOFWEEK(‘1998-02-03’); -> 3 WEEKDAY(date) 返回date的星期索引(0=星期一,1=星期二,...
  • mysqlmysql时间字段怎么加索引

    千次阅读 2021-02-02 16:12:26
    查出5万条结果大约需要4.5秒,这个字段已经加了普通索引,但是explain的类型还是ALL。怎么优化?语句是between and。换了>=和<=查询需要的时间也差不多。SELECT id,name,sex,city,headimg FROM user WHERE ...
  • 关于MySQL索引的好处,如果正确合理设计并且使用索引MySQL是一辆兰博基尼的话,那么没有设计和使用索引MySQL就是一个人力三轮车。对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型网站单日就可能...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,977
精华内容 24,790
关键字:

mysql日期类型索引

mysql 订阅