我想对一个大表(5亿行以上)执行一个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行。)