我一直在忙于更改一些 SQL 查询,以便它们看起来对人眼更具可读性,我还被告知它们可能会快 5-10%。
前面的 SQL 语句看起来像这样。
SELECT * FROM teams WHERE Team1='Joe Bloggs' OR Team2='Joe Bloggs' OR Team3='Joe Bloggs'
我把它改成
SELECT * FROM team WHERE 'Joe Bloggs' IN (Team1,Team2,Team3)
新查询慢了大约 10 倍,在检查了可能是什么原因后,我发现它没有使用任何索引,即使我尝试强制使用索引,它仍然不会使用它。
该表大约有 120,000 行,我无法更改表格式,因为我无权访问的其他应用程序使用它。Team1、Team2、Team3 列都是 VARCHAR(45)
谁能解释为什么索引用于原始查询而不是新查询?我已经阅读了大量页面,但找不到答案,我已经读到 mysql 可能确定不使用索引的速度更快,但是这里不应该是这种情况,因为 IN 查询几乎慢了 10 倍。
多个 OR SELECT(在没有缓存的情况下运行 1000 次)-经过 12.863906860352 IN SELECT(在没有缓存的情况下运行 1000 次)-经过 122.73787903786
感谢您的时间。