mysql 无法使用索引的查询

索引是什么,为什么要用索引,索引使用的时候要注意什么,那些情况下索引无法起作用。

1,索引是什么

  mysql的索引也是一张表,并且是一个有序的表,主要记录了需要索引的数据的物理地址,在数据量巨大的时候,查询某些值,不需要进行全表扫描,就可以找到对应的值,大大加快查询速度。

2,为什么用索引,索引使用的时候要注意什么

  前文已经说过,索引可以大大的加快数据查询的速度,当数据量巨大的时候,加索引比不加索引的速度有指数级的增加。

  但是,并不是所有的字段都加索引,有些情况下比必要的索引会增加数据查询和存储的时间。

  1,小表不需要加索引,数据量小的表会增加存储空间,减缓查询速度。

  2、频繁更新的表不适合加过多的索引,因为每次更新操作都需要重建索引,虽然查询速度加快,但更新却会变慢。

  3、字段建立索引的原则

    优先建立唯一索引,唯一索引的速度是最快的。

    建立索引的字段尽量是短字段,索引也是需要占用磁盘空间,短字段更加适合,而且长字段也会增加查询时间。

    表的索引并不是越多越好,适合的字段索引才能加快查询速度。

    经常排序分组的字段需要加上索引。

    尽量避免NULL

    一个表多个索引的建立需要符合最左原则

3,那些情况下索引无法起作用

  加了索引的表,并不是都起作用,在某些查询条件下,索引并不运行。

  1,查询的条件含有计算、函数的。

    select * from test where id-1=9;

    select * from test where sbustring(a,4)='abc';

  2、查询得到的数据是表数据的%30以上。

  3、隐式转换将不会使用索引。

    a的类型是int

    select * from test where a='151111';将不会使用索引。

  4、or的条件,前面有索引,后面的字段没有索引,则正条查询不用索引。

  5、复合索引的时候,如果条件不是复合索引的第一个值,则不会使用索引(最左原则)

    test只有复合索引(name,classid);

    select * from test where classid=3;将不用索引

  6、like是以%开始的条件不会使用索引。

  7、jion的两端条件的主键和外键字段类型必须是相同的。

  8、不要给‘性别’等值是固定数目的值加索引

  9、not in和<>的条件不会使用索引,

    not in可以用not exists,<>可以用 a>x and a<x

  10、默认值是NULL的数据索引不起作用,所以定义字段的时候,尽量用not null default 0等来定义。

最新文章

  1. IE下angularJS页面跳转的bug
  2. xx
  3. 越狱Season 1-Episode 21: Go
  4. CSS3 学习
  5. SectionIndexer 利用系统的控件,制作比较美观的侧栏索引控件
  6. 教你在Java接口中定义方法
  7. 光照构建失败。Swarm启动失败
  8. 漫说996icu黑名单
  9. transfer pdf to png
  10. (转)解决windows10下无法安装.net framework 3.5,错误代码0x800F081F
  11. apache配置文件:http.conf配置详解
  12. Authentication and Authorization in ASP.NET Web API
  13. 记一次MBR锁机病毒分析
  14. .htaccess技巧: URL重写(Rewrite)与重定向(Redirect)
  15. Tomcat高并发配置优化
  16. ssl证书验证的问题
  17. Android 开发人员必须掌握的 10 个开发工具
  18. IOS 多线程-NSThread 和线程状态
  19. Sicily 8843 Ranking and Friendship
  20. C++常用强制类型转换

热门文章

  1. Linux C 数据结构 -&gt;单向链表
  2. Python之@property详解及底层实现介绍
  3. c 不同类型的指针
  4. php linux yaml 的安装和使用
  5. 端口扫描工具 nmap 使用手册
  6. 交换机 &amp; 路由基础
  7. redis数据存储的细节
  8. Flink 实践教程:入门(6):读取 PG 数据写入 ClickHouse
  9. FZU ICPC 2020 寒假训练 4 —— 模拟(一)
  10. Python多版本共存的方法