3
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散列。抱歉使用错误的列名称。为什么Postgresql搜索文本索引比Int索引快?
我的搜索是:
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';
每当我做一些搜索...
- 如果在 '文本' 和/或 '价值' 栏只索引都
- 若合并('文字'和'价值'在一起)索引
...所以,任何时候我看到下面的图片:
为整数列 '值' 的搜索是
- 较慢
- 从2个搜索组合:*位图堆扫描上index_test *和*位图索引扫描idx_index_value *
搜索varchar列'text'是
- 更快
- 始终使用索引扫描
为什么搜索字符串比搜索整数更容易? 为什么这样的搜索计划有所不同? 有没有类似的情况,当这种效果可以复制,并可以帮助开发人员?
仅仅因为散列是唯一的并不意味着散列将是数据库中唯一的散列。例如,一个哈希用法可能是检查可能在表中表示的重复,复杂的东西。这会否定你的论点(这甚至不是文本索引比数字索引更快的原因)。 – 2017-02-09 22:47:04
@MikeBethany你没有读过这个问题,或者没有理解它。尝试更努力,然后搜索_cardinality_ – 2017-02-09 23:42:25
我读过这个问题,我明白了。你的回答实际上是错误的。如果您不同意,请指出我如何指出您的答案是错误的。你会更好地服用事实而不是情绪。 – 2017-02-10 13:38:58