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 个随机行,“值”列具有从 0 到 100 的整数,“文本”列具有随机 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';
每当我进行一些搜索...
- 如果只显示 'text' 和/或 'value' 列的索引
- 如果结合('text' 和 'value' 一起)索引被呈现
...所以,每当我看到以下图片时:
整数列“值”的搜索是
- 慢点
- 由 2 个搜索组合而成:*index_test 上的位图堆扫描*和 idx_index_value 上的位图索引扫描*
对 varchar 列“文本”的搜索是
- 快点
- 总是使用索引扫描
为什么搜索字符串比搜索整数更容易?为什么搜索计划如此不同?有没有类似的情况可以重现这种效果并且对开发者有帮助?