全部
技术
PHP
MySQL
前端
Linux
JAVA
工具
纪念日计算器
邮记星
个人记账
笔记侠
历史上的今天
生日密码
生日书
生日密码
生日花语
博古通今
三十六计
鬼谷子
笑林广记
本草纲目
山海经
唐诗宋词
宋词300首
唐诗300首
退出
登录
注册
编辑文章
选择分类
PHP
MySQL
前端
Linux
Java
工具
选择专栏
设计模式
java基础
Angular学习
Java面试题
描述:
封面图上传 :
+
点击上传图片
#### mysql 存在索引但不能使用索引的典型场景 1. 以%开头的LIKE查询不能够利用B-tree索引 2. 数据类型出现隐式转换 3. 复合索引的情况下,查询条件不满足索引最左的原则 4. 用or分割开的条件,or前条件有索引,or后的列没有索引,那么涉及的索引不会被用到,**因为or后面的条件没有索引,那么后面的查询肯定要进行全表扫描,在存在全表扫描的情况下,就没有必要多一次索引扫描增加IO访问。意思就是使用or要用上索引,要求使用的所有字段,都必须建立索引** 5. 负向查询(not , not in, not like, <>, != ,!>,!< ) 不会使用索引 6. 独立的列索引不能是表达式(计算、函数、类型转换)的一部分,例如: select * from xxxx where id+1; #### 口诀 ``` 全值匹配我最爱,最左前缀要遵守 带头大哥不能死,中间兄弟不能断 索引列上少计算,范围之后全失效 LIKE符号写最右,覆盖索引不写星 不等空值还有or,索引失效要少用 var引号不能丢,SQL高级也不难 分组之前必排序,一定要上索引啊 ``` #### 建索引注意事项 1. 单值索引,尽量选择过滤性更好的字段,例如:类型(只有0和1),过滤度为50%,识别率很差,不建议建索引 2. 组合索引,索引字段的顺序可以按照识别度进行排序,识别度越高,放在越靠前 3. 组合索引,尽量包含where语句中的更多字段 4. 尽可能的根据分析执行计划、统计信息,去调整query的写法达到合适索引的目的 5. 总结:满足以下条件的字段,才应该创建索引. - 肯定在where条件经常使用 - 该字段的内容不是唯一的几个值(例如type,只有0和1) - 字段内容不是频繁变化.
保存文章