浅析MySQL索引
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了浅析MySQL索引,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2030字,纯文字阅读大概需要3分钟。
内容图文
datetime start_date = datetime.date(2005, 1, 1) end_date = datetime.date(2005, 3, 31) Entry.objects.filter(pub_date__range=(start_date, end_date))相当于
SELECT ... WHERE pub_date BETWEEN ‘2005-01-01‘ and ‘2005-03-31‘;
怎么建立索引
- 总结业务场景,分析出最常用的会在where中出现的字段
比如以我们的项目而言,instance_name
,user_id
, check_date
出现的频率最高,所以这三个字段肯定需要建立索引。通过这样的索引,可以避免全表查找。
- 数据维度势
维度就是说表中容纳的非重复值的个数。我们尽量应该选择一些区分度高的,区分度=count(distinct col)/count(*)
,按照美团的博客来讲,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条记录。
- 不要滥用索引
由于在写入数据时,不仅要求写到数据行,还会影响所有的索引。所以索引建立越多,就会导致写入速度越慢。此外,索引会占据磁盘空间。
- 为字符串的前缀编索引
短
索引可以减少索引空间,从而加快速度。
- 复合索引
比如地址,Province, City,通过这两个值得组合来建立索引。
- 最左前缀匹配
mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。
- 不要把索引列加入计算
尽量不要在where中的“=”的左边,进行计算。
怎么查询
- 在where,order by语句中使用索引
- 避免在where中去使用数据维度势低的,比如sex,isDeleted等
- 如果是数字型字段,则使用数字类型
- 尽量不要使用!=, like或者>, <,引擎可能会进行全表搜索,考虑使用between,union等来替代。
使用Explain来优化SQL
先大概解释下Explain返回的字段名吧。
Column | 意义 |
---|---|
select_type | select类型 |
table | 展示行的table |
type | join类型 |
possible_keys | 索引的可能取值 |
key | 实际使用的索引 |
key_len | 使用索引的长度 |
ref | 跟索引 |
rows | 关键指标 |
filtered | |
Extra |
具体可参考MySQL Explain。
截止目前,我们进行的都是单表查询,接下来看看多表的。
先来复习下left join,right join, inner join, outer join:
Ref:
- 美团点评团队
- MySQL技术内幕
浅析MySQL索引
标签:col str where sel distinct mys 第一个 count 先来
本文系统来源:https://www.cnblogs.com/kiiatio/p/8398341.html
内容总结
以上是互联网集市为您收集整理的浅析MySQL索引全部内容,希望文章能够帮你解决浅析MySQL索引所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。