Ace*_*Ace 5 mysql sql optimization performance
假设我有一个很长的查询字符串,例如.
SELECT id from users where collegeid='1' or collegeid='2' . . . collegeid='1000'
Run Code Online (Sandbox Code Playgroud)
它会以任何方式影响速度或输出吗?
SELECT m.id,m.message,m.postby,m.tstamp,m.type,m.category,u.name,u.img
from messages m
join users u on m.postby=u.uid
where m.cid = '1' or m.cid = '1' . . . . . .
or m.cid = '1000'. . . .
Run Code Online (Sandbox Code Playgroud)
我更愿意在这种情况下使用,IN因为它会更好。但是,要检查性能,您可以尝试查看正在执行的查询的执行计划。您将了解使用两者将获得什么性能差异。
像这样的东西:
SELECT id from users where collegeid IN ('1','2','3'....,'1000')
Run Code Online (Sandbox Code Playgroud)
根据MYSQL
如果所有值都是常量,则根据 expr 的类型对它们求值并排序。然后使用二分搜索来完成对该项目的搜索。这意味着如果 IN 值列表完全由常量组成,IN 会非常快。
IN 列表中的值的数量仅受 max_allowed_packet值的限制。
您还可以检查SQL WHERE 子句中的 IN 与 OR以及MYSQL OR 与 IN 性能
Ergec 给出的答案非常有用:
SELECT * FROM item WHERE id = 1 OR id = 2 ... id = 10000
Run Code Online (Sandbox Code Playgroud)
此查询花费了0.1239 秒
SELECT * FROM item WHERE id IN (1,2,3,...10000)
Run Code Online (Sandbox Code Playgroud)
此查询花费了0.0433 秒
它会以任何方式影响速度或输出吗?
所以答案是肯定的,性能会受到影响。