#覆盖索引:在索引文件中直接获取数据 。即从辅助索引中就可以得到查询记录,而不需要查询聚集索引中的记录 。4 正确使用索引
(1)范围问题,或者说条件不明确,条件中出现这些符号或关键字:>、>=、<、<=、!= 、between...and...、like、大于号、小于号

文章插图
(2)尽量选择区分度高的列作为索引,区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是1,而一些状态、性别字段可能在大数据面前区分度就是0

文章插图
(3)索引列不能在条件中参与计算,保持列“干净”,比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引,原因很简单,b+树中存的都是数据表中的字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本太大 。所以语句应该写成create_time = unix_timestamp(’2014-05-29’)

文章插图
(4)and/or
#1、and与or的逻辑 条件1 and 条件2:所有条件都成立才算成立,但凡要有一个条件不成立则最终结果不成立 条件1 or 条件2:只要有一个条件成立则最终结果就成立#2、and的工作原理 条件: a = 10 and b = 'xxx' and c > 3 and d =4 索引: 制作联合索引(d,a,b,c) 工作原理: 对于连续多个and:mysql会按照联合索引,从左到右的顺序找一个区分度高的索引字段(这样便可以快速锁定很小的范围),加速查询,即按照d—>a->b->c的顺序#3、or的工作原理 条件: a = 10 or b = 'xxx' or c > 3 or d =4 索引: 制作联合索引(d,a,b,c)工作原理: 对于连续多个or:mysql会按照条件的顺序,从左到右依次判断,即a->b->c->d(5)最左前缀匹配原则

文章插图
(6)其他注意事项
- 避免使用select *- 使用count(1)- 创建表时尽量使用 char 代替 varchar- 表的字段顺序固定长度的字段优先- 组合索引代替多个单列索引(由于mysql中每次只能使用一个索引,所以经常使用多个条件查询时更适合使用组合索引)- 尽量使用短索引- 使用连接(JOIN)来代替子查询(Sub-Queries)- 连表时注意条件类型需一致- 索引散列值(重复少)不适合建索引,例:性别不适合5 查询优化神器-explain
优化语句基本上都是在优化rows 。具体用法和字段含义可以参考官网
推荐阅读
- MySQL数据库中如何正确的理解与使用索引?
- MySQL短链接怎么设置
- 使用docker配置域名跳转
- Mac os 10.15系统 使用安装盘快速降级10.14 你会了吗?
- 冰箱使用有啥讲究?注意这7个小细节,电费立省一半
- 生科医学|预防重症97.3%!钟南山:序贯接种建议使用异种新冠疫苗
- 被搜索引擎K过的网站,排名还能恢复吗?
- 雪花秀适合多大年龄的人使用 雪花秀适合什么年龄用?全系列介绍
- Mac怎么使用隔空投送
- 半自动咖啡机介绍 半自动咖啡机使用方法
