使用等于或大于where子句时,大数据集的Mysql是否存在性能差异。
为了同样的目的,我可以运行以下两个查询。
select * from My_Table where MY_Field > 100;
// 100是旧值
或
select * from MY_Table where MY_Field = 101;
如果大于100,则知道My_Field的值为101。
任何建议?
答案 0 :(得分:3)
如果MY_Field
被索引覆盖,那么索引中搜索值的差异就不大了。在结果集大约占表中行总数的30%之前,这是正确的。
但是,对于索引mysql中找到的每条记录,需要对数据文件执行搜索才能找到合适的行(因为你有SELECT *
)。
所以 - 在你的情况下,如果你知道具体的字段值,最好使用=
。
答案 1 :(得分:0)
取决于此特定列的索引类型:BTREE在搜索范围时很好,当您搜索等式时HASH很好
答案 2 :(得分:0)
如果您只知道要获取一个结果,则可以优化查询使用LIMIT 1
select * from MY_Table where MY_Field = 101 LIMIT 1;
哪个更好,因为在执行时如果找到单行匹配结果,mysql将停止执行
答案 3 :(得分:0)
更好地使用MY_Field = 101
因为mysql将执行ref
访问类型,这意味着索引将与参考值进行比较,这比range
MY_Field > 100
更快,这意味着mysql将比较索引中的范围值。
您可以在type
的{{1}}字段中查看该信息。