使用 OR 时如何优化 MySQL table 中的搜索?
How to optimize searching in a MySQL table when using OR?
我最近了解到,我可以使用以下带 OR 的 select 语句在 MySQL table 中跨多个列进行搜索:
SELECT * data WHERE TEMP = "3000" OR X ="3000" OR Y="3000";
需要 return 的结果,但是 return 中的结果确实需要大约 1.7 秒,而 table 只有约 260k 行。我也已经为每个搜索的列添加了索引。
有没有办法优化这个查询?还是有另一种速度更快但 return 结果相同的方法?
另一种选择是使用 UNION...
SELECT * FROM data WHERE TEMP = "3000"
UNION
SELECT * FROM data WHERE X ="3000"
UNION
SELECT * FROM data WHERE Y="3000";
...然而,提高性能的真正关键首先是索引,其次是查询分析器。通常数据决定哪个更快,因为 TEMP 可能是 Y 的 100 倍,成为“3000”的可能性 - 例如,这应该在您的原始 OR 语句中排在第一位。
我最近了解到,我可以使用以下带 OR 的 select 语句在 MySQL table 中跨多个列进行搜索:
SELECT * data WHERE TEMP = "3000" OR X ="3000" OR Y="3000";
需要 return 的结果,但是 return 中的结果确实需要大约 1.7 秒,而 table 只有约 260k 行。我也已经为每个搜索的列添加了索引。
有没有办法优化这个查询?还是有另一种速度更快但 return 结果相同的方法?
另一种选择是使用 UNION...
SELECT * FROM data WHERE TEMP = "3000"
UNION
SELECT * FROM data WHERE X ="3000"
UNION
SELECT * FROM data WHERE Y="3000";
...然而,提高性能的真正关键首先是索引,其次是查询分析器。通常数据决定哪个更快,因为 TEMP 可能是 Y 的 100 倍,成为“3000”的可能性 - 例如,这应该在您的原始 OR 语句中排在第一位。