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