精华内容
下载资源
问答
  • mysql需要加索引字段:1、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;2、经常与其他表进行连接的表,在连接字段上应该建立索引;3、分组字段或者排序字段应该创建索引;4、选择性高的字段上...

    mysql需要加索引的字段:1、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;2、经常与其他表进行连接的表,在连接字段上应该建立索引;3、分组字段或者排序字段应该创建索引;4、选择性高的字段上应该建立索引。

    1b45766d81f7ae1f51b772c8b921d35f.png

    1、表的某个字段值得离散度越高,该字段越适合选作索引的关键字。主键字段以及唯一性约束字段适合选作索引的关键字,原因就是这些字段的值非常离散。MySQL 在处理主键约束以及唯一性约束时,考虑周全。数据库用户创建主键约束的同时, MySQL 自动创建主索引( primary index ),且索引名称为 Primary;数据库用户创建唯一性索引时, MySQL 自动创建唯一性索引( unique index ),默认情况下,索引名为唯一性索引的字段名。

    2、占用存储空间少的字段更适合选作索引的关键字。例如,与字符串相比,整数字段占用的存储空间较少,因此,较为适合选作索引关键字。

    3、存储空间固定的字段更适合选作索引的关键字。与 text 类型的字段相比, char 类型的字段较为适合选作索引关键字。

    4、Where 子句中经常使用的字段应该创建索引,分组字段或者排序字段应该创建索引,两个表的连接字段应该创建索引。

    5、更新频繁的字段不适合创建索引,不会出现在 where 子句中的字段不应该创建索引。

    6、经常与其他表进行连接的表,在连接字段上应该建立索引;

    7、索引应该建在选择性高的字段上;

    8、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;

    展开全文
  • 数据库中字段适合添加索引的有表中某个字段值离散度越高越适合,占用存储空间少的字段,存储空间固定的字段,where子句中经常用到的字段等1、表的某个字段值得离散度越高,该字段越适合选作索引的关键字。...

    数据库中字段适合添加索引的有表中某个字段值离散度越高越适合,占用存储空间少的字段,存储空间固定的字段,where子句中经常用到的字段等

    79ca662504c0da8a974f7138577c5c18.png

    1、表的某个字段值得离散度越高,该字段越适合选作索引的关键字。主键字段以及唯一性约束字段适合选作索引的关键字,原因就是这些字段的值非常离散。MySQL 在处理主键约束以及唯一性约束时,考虑周全。数据库用户创建主键约束的同时, MySQL 自动创建主索引( primary index ),且索引名称为 Primary;数据库用户创建唯一性索引时, MySQL 自动创建唯一性索引( unique index ),默认情况下,索引名为唯一性索引的字段名。

    2、占用存储空间少的字段更适合选作索引的关键字。例如,与字符串相比,整数字段占用的存储空间较少,因此,较为适合选作索引关键字。

    3、存储空间固定的字段更适合选作索引的关键字。与 text 类型的字段相比, char 类型的字段较为适合选作索引关键字。

    4、Where 子句中经常使用的字段应该创建索引,分组字段或者排序字段应该创建索引,两个表的连接字段应该创建索引。

    5、更新频繁的字段不适合创建索引,不会出现在 where 子句中的字段不应该创建索引。

    展开全文
  • 一、原因:-非聚簇索引存储了对主键的引用,如果select字段不在非聚簇索引内,就需要跳到主键索引。-如果非聚簇索引值重复率高,那么查询时就会大量出现上图中从右边跳到左边的情况,导致整个流程很慢原因就是上面的...

    一、原因:

    - 非聚簇索引存储了对主键的引用,如果 select 字段不在非聚簇索引内,就需要跳到主键索引。

    - 如果非聚簇索引值重复率高,那么查询时就会大量出现上图中从右边跳到左边的情况,导致整个流程很慢

    原因就是上面的。

    数据库中聚集索引只有一个,默认主键。其他用户创建的索引都是非聚集索引。

    非聚集索引存储了对主键的引用,即通过索引确定叶子节点之后,还需要再次根据主键去查询数据。(所以会查询两次)

    如果非聚集索引重复率高(即一个同样的值有多个主键),那么首先你会从索引中取一半主键值,然后根据主键值再去查询数据,增加了IO,所以特别耗时。

    大概就是上面的原因。

    二、聚集索引和非聚集索引

    2.1 区别:

    主要可以参考高性能MySQL。这里简单总结一下

    - 聚集索引把索引和数据存在了一起。

    可以这么理解,聚集索引的叶子节点存储的是数据的指针(或者是数据本身)。具体暂时不确定,后续了解之后再确定。

    - 非聚集索引(也叫二级索引)的叶子节点存储的是主键值(或叫做聚集索引值)

    2.2 查询次数

    非聚集索引需要两次查找,先从非聚集索引中找到主键值,然后再去聚集索引中找到具体数据。

    聚集索引只需要查找本身。

    2.3 为什么不适合在枚举少的字段上建立索引?

    如果聚集索引唯一,那么条件只会确定几条值的主键,然后去聚集索引中查询还可以。

    如果聚集索引重复,那么条件会确定近乎一般或者1/3或者1/5的主键值,然后再一个一个去聚集索引中查询,就会引起问题。

    2.4 如果没有索引,数据库是怎么查询的?

    全表扫描。

    如果索引可以减少全表扫描,那么索引有效。如果索引导致了比全表扫描更糟糕的结果,那么还不如全表扫描。

    三、参考

    展开全文
  • date字段上建立了索引,但是sql语句中使用的where条件如下:WHERE to_char(start_time,’yyyy-mm-hh hh24:mi:ss’) > ‘2009-08-01 00:00:00′ AND to_char(start_time,’yyyy-mm-hh hh24:mi:ss’) < '2009-08...

    date字段上建立了索引,但是sql语句中使用的where条件如下:

    WHERE to_char(start_time,’yyyy-mm-hh hh24:mi:ss’) > ‘2009-08-01 00:00:00′ AND to_char(start_time,’yyyy-mm-hh hh24:mi:ss’) < '2009-08-31 23:59:59';

    因为使用了to_char函数,造成了索引没有使用。正确的写法如下:

    WHERE start_time > to_date(‘2009-08-01 00:00:00′ ,’yyyy-mm-hh hh24:mi:ss’) AND start_time < to_date('2009-08-31 23:59:59', ,'yyyy-mm-hh hh24:mi:ss');

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    以下内容引自itpub论坛:

    问题:

    环境:AIX 4.3.3,oracle9.2RAC,表mytab共有数据15万条左右上。

    在日期型字段(mydate)上建了一个索引(create index idx1 on mytab(mydate)),

    可是SQL(select mydate from mytab where to_char(mydate,’yyyymmdd’)=’20040310’)根本不使用这个索引。

    后来在该字段上建了一个函数索引:to_char(mydate,’yyyymmdd’)之后,该sql可以使用这个索引了,但是一旦加上order by mydate(select mydate from mytab where to_char(mydate,’yyyymmdd’)=’20040310′ order by mydate)之后,oracle又不使用索引了。真是非常困惑。

    把数据倒到Redhat AS3+oracle10上,现象也很费解。建索引:create index idx1 on mytab(to_char(mydate,’yyyymmdd’)),SQL(select mydate from mytab where to_char(mydate,’yyyymmdd’)=’20040310’)和SQL(select mydate from mytab where to_char(mydate,’yyyymmdd’)=’20040310′ order by mydate)都能使用该索引。

    那位大虾能解释上述现象啊?

    答复:

    我觉得你用to_char转换索引字段不可取

    where to_char(mydate,’yyyymmdd’)=’20040310’)

    可以转换

    where mydate >= to_date(‘20040310′,’yyyymmdd’)

    and mydate < to_date('20040311','yyyymmdd')

    原帖地址:http://www.itpub.net/thread-208701-1-1.html

    标签:索引

    展开全文
  • Mysql哪些字段适合建立索引1、表的主键、外键必须有索引;2、数据量超过300的表应该有索引;3、经常与其他表进行连接的表,在连接字段上应该建立索引;4、经常出现在Where子句中的字段,特别是大表的字段,应该建立...
  • 1 数据库建立索引常用的规则如下:1、表的主键、外键必须有索引...6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:A、正确选...
  • 用phpmyadmin查看你的数据库,设置为主键、选择唯一索引,是否允许重复与数据类型无关。关键字UNIQUE把它定义为一个唯一索引.唯一性索引 和“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须...
  • 只有2种取值的字段,建了索引数据库也一定会用,只会白白增加索引维护的额外开销,因为索引也是需要存储的,所以插入和更新的写入操作,同时需要插入和更新你这个字段索引的.所以说,唯一性太差的字段不需要创建索引,...
  • 1.字段不建索引:index:false PUT /test { "mappings": { "test": { "properties": { ...2.数据只索引不存储 2.1方案一(不推荐) setting中的通用属性Store 该属性的取值可以为yes和no,..
  • 创建索引 PUT /索引的名字 { "mappings": { "properties": { "xxx1属性": { "type": "该属性的类型" }, "xxx2属性": { "type": "该属性的类型" } } } } ES客户端:PUT /索引的名字 Linux:curl -X PUT ...
  • 索引:Inoodb 表结构id dtEventTime iType iMoney iAction时间 类型 金钱 动作在 where 的两列上都有索引alter table costmoney add Index test(dtEventTime,iType)SQlEXPLAIN select count(*) from CostMoney WHERE ...
  • mysql多字段唯一索引

    2021-01-19 06:32:34
    例如:有以下需求:每个人每一天只有可能产生一条记录:处了程序约定之外,数据库本身也可以设定:例如:user表中有userID,userName两个字段,如果希望有2条一模一样的记录,需要给user表添加多个字段的联合唯一索引:alter...
  • mysql多个字段唯一索引

    千次阅读 2021-01-18 22:16:38
    方法:unique index(字段一,字段二)例子:CREATETABLEIFNOTEXISTS`ppserver`.`eventTable`(`userId`INTUNSIGNEDNOTnull,`taskId`INTUNSIGNEDNOTnull,`date`TIMESTAMP...
  • 那些字段适合建索引

    千次阅读 2021-02-02 14:36:59
    数据库建立索引常用的规则如下:表...索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:正确选择复合索引中的主列字段,一般是选择性...
  • 因为 es 索引结构特性当我们对现有索引新增字段时并会影响历史数据,并且如果没有写入这个字段值时,也不会有默认值 所以有时我们需要对历史数据设置默认值 1. 使用 put 方法加字段 PUT my_index/_mapping { ...
  • 1、索引是有序的。当一个空值进入索引时,无法确定...当检索一个空值时,由于空值与空值并相等,所以,无法在索引中找到期望的空值索引。 以上讨论限于通常的B树索引类型,对于位图索引,是可以记录和标记空值的 ...
  • 在数据库设计的时候,我们经常会需要设计时间字段,在MYSQL中,时间字段可以使用int、timestamp、datetime三种类型来存储,那么这三种类型哪一种用来存储时间性能比较高,效率好呢?飘易就这个问题,来一个实践出...
  • 转:首先,在大多数情况下,复合索引比单字段索引好.以税务系统的SB_ZSXX(申报类_征收信息表)为例,该表为税务系统最大的交易表.如果分别按纳税人识别号,税务机关代码,月份3个字段查询,每个字段在该表中的可选性或约束...
  • 状态status字段是否要创建索引

    千次阅读 多人点赞 2021-04-23 17:43:43
    前段时间在公司工作中我建议创建的某个表字段索引在内部评审的时候被删除了,理由是”状态枚举值...虽然不是什么大事,直到现在也没有什么明显影响,但这个事情给我心底留下了疑问,“状态枚举字段是否应该建立索引?”
  • Elasticsearch索引新增字段

    千次阅读 2020-12-19 20:24:24
    最近公司做的一个需求,需要将现已有的50+万数据的索引新增一个字段,之前没有在索引中加过字段,记录一下新增字段的方法。 首先需要有一个已经存在的索引,下面先创建一个索引skus PUT /skus { "settings": { ...
  • 用innodb来举例,有表 employee(id, dept_id,sex...), id主键,dept_id上建索引dept_ind。select id from employee where dept_id =12.那么因为innodb的二级索引都会包含主键,可以认为dept_id上的索引为(dept_id,id...
  • 匿名用户1级2016-04-08 回答需要重新创建索引,因为长度不同会认为是两个不同的所索引。创建和删除索引索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或ALTER TABLE来给表增加索引。删除索引...
  • Mysql的排序字段要建立索引,我想这连初学者都知道。但是我想知道的是在下面这两种情况下对索引建立是否有一定的标准。假如我建立一个这样的post表mysql> DESC post;+---------+------------------+------+-----+...
  • 车辆与终端的中间表car_bind_terminalcarID,外键terminalID,外键任务(需求)现在需要实现车辆与终端的一对一映射,让中间表里的carID和terminalID这两个字段不能重复,否则添加数据时会失败。比如,车辆与终端的...
  • 1.普通索引。这是最基本的索引,它没有任何限制。...如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB 和 TEXT 类型,必须指定length,下同。(2)修改表结构:Alter tableName ADD IND...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 627,644
精华内容 251,057
关键字:

哪些字段不能设置索引