问题描述
我想对一个大表(500 多万行)执行 MysqL 查询。特定列有数千个可能的元素值,我想返回该列只有 100 个这些值的所有行。
假设此 column1
可以具有以下值:A1,A2,A3,..,A12309
。我想做这样的查询:
SELECT column2 WHERE column1='A1' OR column1='A2'... OR column1='A100'
拥有 100 个不同的 OR 运算符是非常低效的。
MysqL 是否适合于此,或者是否有更好的 DBMS/数据分析工具?
解决方法
SELECT column2 FROM tbl
WHERE column1 IN ('A1','A2',... 'A100')
对于 100 个值,这将相当有效。
这也应该有帮助:
INDEX(column1,column2)
哪个版本的 MySQL? (某些版本有一个截止值——高于 IN
中的一些值会导致执行计划效率较低,尤其是对于 500M 行。)