长查询字符串会影响速度吗?

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)

Rah*_*thi 4

我更愿意在这种情况下使用,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_pa​​cket值的限制。

您还可以检查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 秒

IN 比 OR 快 3 倍

它会以任何方式影响速度或输出吗?

所以答案是肯定的,性能会受到影响。