我的项目有点旧。它使用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语句?