我有一个包含字段的表格:
long id;
String field1;
String field2;
String status1;
String status2;
Boolean compareResult;
status1
和 status2
有一些特定的值(枚举)。 compareStatus
如果 true
==status1
为 status2
,否则为 false
。以上 3 个字段均已编入索引。假设我的表有大约 100 万条记录,字段 compareResult
对需要查找具有不同状态的所有记录的业务有帮助吗?我的意思是在 select * where status1=status2
和 select * where compareResult=true
之间哪个更好?
答案 0 :(得分:1)
status1
或 status2
上的索引不用于 select * where status1=status2
。因此执行了完整扫描。
但是索引 compareResult
用于 select * where compareResult='TRUE'
。所以使用第二个查询可能会更快。
但是,取决于您的实际机器(IO 和 CPU 速度、RAM 量等)以及行数是否会随着时间的推移而增加,嗯。 我建议使用或多或少的真实数据进行一些快速测试,看看服务器的性能如何。
提示:
由于 compareResult
将只包含两个不同的值('TRUE'
和 'FALSE'
或 0
和 1
或任何用于表示布尔值的值),您可以使用创建索引时的 COMPRESS
子句。