MySQL索引不会被用到的情况汇总

  


  

  

一般可分为四类:

  
      <李>普通索引:最普通的索引   <李>唯一索引:索引列的值必须唯一,但允许有空值   <李>主键索引:一种特殊的唯一索引,不允许有空值   <李>联合索引:索引列有多个字段,使用时需要满足最左前缀原则李   
  

<>强普通索引
  

  

这是最基本的索引,它没有任何限制。它有以下几种创建方式:

  

1。创建索引

  

代码如下:

        创建索引indexName>   改变mytable添加索引(indexName)>   创建表mytable (   ID INT非空,   用户名VARCHAR(16)不是零,   索引(indexName)(用户名(长度)   );      

删除索引的语法:

        指数下降(indexName)>   创建唯一索引indexName>   改变mytable添加独特(indexName)>   创建表mytable (   ID INT非空,   用户名VARCHAR(16)不是零,   独特的[indexName](用户名(长度)   );      

<强>主键索引
  

  

它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引:

  

代码如下:

        创建表mytable (   ID INT非空,   用户名VARCHAR(16)不是零,   主键(ID)   );      

当然也可以用改变命令。记住:一个表只能有一个主键。

  

<>强联合索引
  

  

为了形象地对比单列索引和组合索引,为表添加多个字段:

        创建表mytable (   ID INT非空,   用户名VARCHAR(16)不是零,   城市VARCHAR(50)非空,   年龄INT不是零   );      

为了进一步榨取MySQL的效率,就要考虑建立组合索引。就是将名称,城市,年龄建到一个索引里:

  

代码如下:

        ALTER TABLE mytable添加索引name_city_age(名字(10)、城市、年龄),      


  

  

索引不是每次都可以生效的,如果我们操作不对,那么很有可能是走全表扫描而不是走的索引,解释中的possible_key, key_len以及关键参数都可以分析我们的SQL语句是否用到了索引。

  

<强>以下情况将会导致索引失效
  

  
      <李>查询的列中使用了!=比如选择id、姓名,年龄从学生id !=2;李   <李>查询的列中使用了函数操作,比如战俘(id, 2)对id做平方这种函数表达式,也不会用到索引   <李>如果条件中有,即使其中有部分条件带索引也不会使用(这也是为什么尽量少用或的原因)   <李>联合索引中即使满足最左前缀原则,但是第一个条件带了范围查询,那么也不会用到索引   <李>存在索引列的数据类型隐形转换,则用不上索引,比如列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引   <李>如果MySQL估计使用全表扫描要比使用索引快,则不使用索引   
  

以上都可以使用解释进行测试是否用到了索引。

  

  

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。

MySQL索引不会被用到的情况汇总