26丨索引的使用原则:如何通过索引让SQL查询效率最大化?
该思维导图由 AI 生成,仅供参考
创建索引有哪些规律?
- 深入了解
- 翻译
- 解释
- 总结
本文总结了如何通过索引让SQL查询效率最大化的原则。首先,文章介绍了何时需要创建索引,包括字段具有唯一性限制、频繁作为WHERE查询条件的字段、需要经常GROUP BY和ORDER BY的列、UPDATE、DELETE的WHERE条件列以及DISTINCT字段。其次,文章强调了创建索引的规律,包括对字段创建索引以提升查询效率,并且在多表JOIN连接操作时需要注意连接表的数量、对WHERE条件和用于连接的字段创建索引的原则。最后,文章通过具体的案例分析了创建索引对SQL查询效率的影响,强调了合理创建索引对提升数据库查询性能的重要性。文章还提到了避免索引失效的方法,包括避免对索引进行表达式计算、避免对索引使用函数、注意在WHERE子句中的条件列是否都进行了索引等。总的来说,文章强调了合理创建和使用索引对提升数据库查询性能的重要性,同时也指出了避免索引失效的方法,为读者提供了实用的技术指导。
《SQL 必知必会》,新⼈⾸单¥68
全部留言(60)
- 最新
- 精选
- wusiration索引失效,因为使用了date函数。改成SELECT comment_id, comment_text, comment_time FROM product_comment WHERE comment_time BETWEEN DATE('2018-10-01 10:00:00') AND DATE('2018-10-02 10:00:00')
作者回复: Good Job
2019-08-09950 - Yuhui老师您好!请教一下如何查找“不经常使用的“索引呢?谢谢!
作者回复: 你可以查看下MySQL中的performance_schema.table_io_waits_summary_by_index_usage数据表,它表明了每个索引进行统计的I/O等待事件,其中COUNT_STAR代表了事件的次数。过滤掉一些系统表,查看下数据表中有哪些索引不经常使用,具体的SQL语句:SELECT OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME,COUNT_STAR FROM performance_schema.table_io_waits_summary_by_index_usage WHERE INDEX_NAME IS NOT NULL AND COUNT_STAR = 0 AND OBJECT_SCHEMA != 'mysql' AND OBJECT_SCHEMA != 'performance_schema'
2019-09-1935 - 佚花关于like. %在左边,即使有索引,也会失效. 只有当%在右边时,才会生效
作者回复: 对的 如果%在左侧就是前模糊匹配,有索引也会失效。所以字符串进行匹配的时候,需要最左侧是个明确的字符才能使用上索引。
2019-08-218 - haer索引失效,因为使用了date函数
作者回复: 对的
2019-08-097 - Vackine关于关系型数据库模型介绍的论文,老师有推荐的么✨
作者回复: 一本经典的书《Towards a Logical Reconstruction of Relational Database Theory》 另外关系型数据库里面也有不同的使用场景,比如关于图像检索的 《Chabot: Retrieval from a Relational Database of Images》 查询XML的: 《Storing and querying ordered XML using a relational database system》
2019-08-095 - Goal老师,今天文章中的“product_comment”表结构和数据,是从哪里导入的呢? 个人感觉,本课程用到的所有表都可以放到一个统一的地方,比如之前的 GitHub上面,方便我们统一下载。
作者回复: 因为文件大于100M,就先放到百度网盘:https://pan.baidu.com/s/1LBEAm50DDP9AjErLtGplLg 提取码:32ep 多谢建议,我把它也放到GitHub上,大于100M的给出百度网盘的链接
2019-08-134 - ABC索引会失效,因为使用了date函数。 如果修改的话,可以用between和and,对查询条件进行转换。 例如:currtime between date('2018-01-10 10:00:00) and date('2018-02-10 12:00:00') 手机回复,没有实际运行,如有错误请老师指正,谢谢
作者回复: Good Job
2019-08-094 - rike“按照 user_id 进行评论分组,同时按照评论时间降序的方式进行排序”,执行对应的sql后,报错。望大神验证一下,不要误导付费学习的读者。
作者回复: 应该是可以运行的,rike同学再试试
2019-12-2733 - 抢小孩子糖吃老师 如果我们给女儿国的性别加上了索引 我们查看男性的话会快很多 但如果我们有时需要查看男性 有时需要查看女性 还适合在性别上建索引吗 查看女性的时候优化器会选择用这个索引找数据吗
作者回复: 这个看需求,对于某个疾病(发病率很低)的正样本,可以选择创建索引。如果性别男女都需要查看,可以不建索引,对于女性,优化器也不会使用索引进行查找。
2019-11-233 - niemo老师 您好,sql条件执行顺序不是从右到左么?所有在使用联合索引的时候,把最左的索引写在where条件的最右边,这样理解对么?
作者回复: SQL执行顺序: SELECT DISTINCT player_id, player_name, count(*) as num #顺序5 FROM player JOIN team ON player.team_id = team.team_id #顺序1 WHERE height > 1.80 #顺序2 GROUP BY player.team_id #顺序3 HAVING num > 2 #顺序4 ORDER BY num DESC #顺序6 LIMIT 2 #顺序7
2019-08-093