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:
- более быстрый
- всегда с помощью индексного сканирования
Почему поиск строки проще, чем поиск целых чисел? Почему поисковые планы отличаются таким образом? Есть ли подобные ситуации, когда этот эффект может быть воспроизведен и может быть полезен для разработчиков?
Просто потому, что хэш уникален, не означает, что хеш будет единственным в базе данных. Например, одно использование хэша может заключаться в проверке дубликатов, сложных вещей, которые могут быть представлены в вашей таблице. Это отрицает ваш аргумент (что не было даже причиной того, что текстовый индекс быстрее, чем числовой индекс). –
@MikeBethany Вы не прочитали вопрос или не поняли его. Попробуйте успеть, а затем выполните поиск _cardinality_ –
Я прочитал вопрос, и я это понимаю. Ваш ответ фактически ошибочен. Если вы не согласны, укажите, как я указал, как ваш ответ неправильный. Вам лучше использовать факты вместо эмоций. –