SQL 使用 OR 运算符性能不佳
SQL with OR operator bad performance
我有一个带有索引字段 year
的 table,我遇到了一些查询性能不佳的问题,我不明白为什么。使用这样的查询:
select ..... where year = 2016 ...
我的表现不错,但查询如下:
select .... where ((year = 2016 and month = 1) or (year = 2015 and month = 7)) ...
事情变得非常缓慢......为什么在最后一个案例中不使用 year
字段的索引?我知道为什么在这样的查询中性能会很差:
select .... where year = 2016 or month = 1
但为什么是我呢?
提前致谢!
在 year
和 month
上建立索引并使用:
where (year, month) in ( (2016, 1), (2015, 7) )
Oracle 应该足够聪明,可以为您的查询使用复合索引。这个版本更简洁,更容易编写和阅读。
我有一个带有索引字段 year
的 table,我遇到了一些查询性能不佳的问题,我不明白为什么。使用这样的查询:
select ..... where year = 2016 ...
我的表现不错,但查询如下:
select .... where ((year = 2016 and month = 1) or (year = 2015 and month = 7)) ...
事情变得非常缓慢......为什么在最后一个案例中不使用 year
字段的索引?我知道为什么在这样的查询中性能会很差:
select .... where year = 2016 or month = 1
但为什么是我呢?
提前致谢!
在 year
和 month
上建立索引并使用:
where (year, month) in ( (2016, 1), (2015, 7) )
Oracle 应该足够聪明,可以为您的查询使用复合索引。这个版本更简洁,更容易编写和阅读。