更新,现在想想,查询效率不高,首先用explain分析查询语句,看看有没有用上索引,如果没有用上索引,如果是单列索引,有很多情况会导致索引失效。如果是组合索引,要考虑最左匹配原则。
如果索引都用上了,就需要看看扫描了多少行,查询了多少表,选择了多少列。效率最高的就是扫描更少的行数,表,列。
优化的核心思想就是查询更少的表,行,列。用索引查询。做到上面几点,效率也就上来了
如果表设计的不合理,可以重构,如果设计合理,可以考虑空间换时间,例如冗余列等等
以下是原答案,很早以前写的,写的不太准确,望大家见谅。
最近在优化链表查询的时候发现就算链接的表里面不到1w的数据链接查询也需要10多秒,这个速度简直不能忍受
通过EXPLAIN发现,extra中有数据是Using join buffer (Block Nested Loop),而其它关联的表都是Using index,最后使用排除法发现当extra为Using join buffer (Block Nested Loop)是最慢的,就算加了索引也没用,后来发现是索引加的不对
应该在链接的条件列上加索引,并且链接的条件列需要在索引的首位(表所有索引中的第一个索引列:最左匹配原则),使用此方法完成索引修改之后,速度瞬间提升了,以前要10多秒的也提升到了毫秒级
mysql优化经验不多,这种方法我试验可以,不排除运气的情况,实际是否有用需要大家自己再验证
版权声明:本文为u013958151原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。