原文网址:MySQL--SQL语句优化--大全_IT利刃出鞘的博客-CSDN博客
简介
本文介绍MySQL的一些常见的语句优化。
in
in与exists
- in后的查询集合是确定且有限
- 集合内的值连续时,应尽可能使用between …and 。
- 集合内的值不连续时,用in,例如in (1,3,7)。
- in后的查询集合不确定。例如in (select…),应判断内查询与外查询的关系。
- 若内查询的表小于外查询的表,用in效率高。(因为in先执行内查询,再执行外查询)
- 若外查询的表小于内查询的表,用exists效率高。(因为exists先执行外查询,再执行内查询)
in与or
简介
- 如果in和or所在列有索引:or和in没啥差别,执行计划和执行时间都几乎一样。二者平手
- 如果in和or所在列没索引:性能差别就很大了。IN 胜出!
原因
MYSQL会对IN()里面的数据进行排序,然后用二分法查找其是否在列表中,这个算法的效率是O(logn),而等同的OR子句的查找效率是O(n)。
上边只是部分内容,为便于维护,本文已迁移到此地址:MySQL-SQL语句优化-大全 - 自学精灵