我们有一个包含超过两百万行的表,其中对它的所有查询都是一个使用Column1和的查找Column2.此外,只有一个可能的结果.例如...
Col1 Col2
1 5
6 10
11 15
select * from table1 where 8 between Col1 and Col2
Run Code Online (Sandbox Code Playgroud)
我目前在Col1和上有一个唯一的聚簇索引Col2.到目前为止,我一直无法弄清楚如何进一步调整查询和索引以最小化处理的行.执行计划目前报告在找到一个唯一正确答案时处理的成本几乎为0.5和113k行.
我可以忽略哪些选项?
根据要求,当前执行计划的一些细节:
Operation
Clustered Index Seek
Predicate
CONVERT_IMPLICIT(bigint,[@2],0)<=[Col2]
Seek Predicate
Seek Keys[1]: End: Col1 <= Scalar Operator(CONVERT_IMPLICIT(bigint,[@1],0))
Run Code Online (Sandbox Code Playgroud) 当我意识到查询的这一部分正在进行全表扫描时,我正在尝试优化更大的查询并遇到这个问题,考虑到所讨论的字段是主键,在我看来这是没有意义的.我认为 MySQL Optimizer会使用索引.
这是表格:
CREATE TABLE userapplication (
application_id int(11) NOT NULL auto_increment,
userid int(11) NOT NULL default '0',
accountid int(11) NOT NULL default '0',
resume_id int(11) NOT NULL default '0',
coverletter_id int(11) NOT NULL default '0',
user_email varchar(100) NOT NULL default '',
account_name varchar(200) NOT NULL default '',
resume_name varchar(255) NOT NULL default '',
resume_modified datetime NOT NULL default '0000-00-00 00:00:00',
cover_name varchar(255) NOT NULL default '',
cover_modified datetime NOT NULL default '0000-00-00 00:00:00',
application_status tinyint(4) NOT NULL …Run Code Online (Sandbox Code Playgroud)