MySQL优化:用UNION替换OR语句

时间:2018-02-22 10:41:31

标签: mysql sql performance query-optimization union

我的项目有点旧。它使用mysql 5.5.59。在开始时,表中只有一些行,性能很好。但现在这个表有大约80,000行(imho:它仍然非常小)。

但实际上我们遇到了一些性能问题,所以我的任务是优化SQL。我认为非常奇怪,我无法解释: UNION比OR更快!

这是我简单的OR声明:

SELECT SQL_NO_CACHE SQL_CALC_FOUND_ROWS field1, field2, field3
FROM tablename
WHERE field1 = 'some_value' OR field2 = 'some_value'
ORDER BY field3;

这是我简单的UNION声明:

SELECT SQL_NO_CACHE SQL_CALC_FOUND_ROWS *
FROM (
SELECT field1, field2, field3
FROM tablename
WHERE field1 = 'some_value') a1 
UNION (
SELECT field1, field2, field3
FROM tablename
WHERE field2 = 'some_value')
ORDER BY field3;

theres是field1和field2的索引。

我使用SQL_NO_CACHE测试mysql-cli来阻止来自mysql的查询缓存并获得以下结果:UNION语句需要0.00秒,OR语句需要0.21秒

任何人都可以解释这种行为吗?或者有没有办法优化OR语句?

0 个答案:

没有答案