CREATE TABLE index_test
(
id int PRIMARY KEY NOT NULL,
text varchar(2048) NOT NULL,
value int NOT NULL
);
CREATE INDEX idx_index_value ON index_test ( value );
CREATE INDEX idx_index_value_and_text ON index_test ( value, text );
CREATE INDEX idx_index_text_and_value ON index_test ( text, value );
CREATE INDEX idx_index_text ON index_test ( text );
该表填充了10000个随机行,“value”列的整数从0到100,“text”列具有随机的128位md5散列。很抱歉使用错误的列名。
我的搜索是:
select * from index_test r where r.value=56;
select * from index_test r where r.value=56 and r.text='dfs';
select * from index_test r where r.text='sdf';
我随时搜索一下......
...所以,每当我看到以下图片时:
搜索整数列'value'是
搜索varchar列'text'是
为什么搜索String比搜索Integer更容易? 为什么搜索计划会以这种方式不同? 有什么类似的情况可以重现这种效果,对开发人员有帮助吗?
答案 0 :(得分:2)
由于文本是一个散列,根据定义是唯一的,在表格的10k行中只有一行与该文本匹配。
56值将在10k行内存在约100次,并且它将分散在整个表中。因此,规划人员首先访问索引并找到这些行所在的页面。然后它访问每个分散的页面以检索行。