标签:gis int 个数 联系 拓展 row _id 查找 哈希
原文请关注 这里
这是 文章 的翻译,在翻译过程中,会对其中涉及到的语句加上一些个人理解以及 SQL 语句的执行,并进行特别的标注。
用了索引 LAST_NAME
SELECT * FROM EMPLOYEES WHERE LAST_NAME=“Smith”;
用了索引 (DEPT,LAST_NAME)
SELECT * FROM EMPLOYEES WHERE
LAST_NAME=“Smith” AND
DEPT=“Accounting”
这里虽然索引字段顺序和查询的顺序颠倒,依然会走索引,不是因为最左匹配不走索引。
在 MySQL5.7 中使用 explain 执行了一下,发现还是会走索引的,估计 MySQL 底层做了什么优化?
SQL 优化的第一原则:
MySQL 在多列索引中,一遇到 (<,>,between)就会停止使用 key,然而能继续使用 key 直到 in 范围的右边。
排序
SELECT * FROM PLAYERS ORDER BY SCORE DESC LIMIT 10
SELECT * FROM PLAYERS WHERE COUNTRY=“US” ORDER BY SCORE DESC LIMIT 10
在 MySQL 中使用 join 会导致嵌套循环,例如下面语句会遍历 POSTS 表找到 Peter 的所有文章,然后根据找到的文章从 COMMENTS 表中找到该文章的索引评论;
SELECT * FROM POSTS,COMMENTS WHERE
AUTHOR=“Peter” AND COMMENTS.POST_ID=POSTS.ID
重新设计 join 中没法进行索引的语句也是非常重要的。
可以在索引最左边一列上建立前缀索引:
EXPLAIN 是一个非常好的查看数据库怎么执行查询的工具:
个人理解:对于 key,如果想使用后面的列,要想走索引的话,可以把前面的列全部列出来,当然,前面的列的可能数最好比较小。
Email: pz@percona.com
标签:gis int 个数 联系 拓展 row _id 查找 哈希
原文地址:https://www.cnblogs.com/qiaojushuang/p/9858805.html