PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Търсене в индекси на изрази

Точно както сте чели от jjanes другаде:индексът на израз се разглежда само ако изразът съвпада точно в предиката на заявката. Планирането на заявки в Postgres не е AI. Това бързо би преодоляло целта да се правят бързи заявки, ако планирането им отнема твърде много време.

Можете да оптимизирате малко индекса си, ако това е някаква утеха. left() е по-просто и по-бързо от substring() :

CREATE INDEX record_changes_log_detail_old_value_ix_btree
ON record_changes_log_detail (left(old_value,1024) text_pattern_ops);

Освен това имамаксимален размер на реда от 2704 байта за btree индекси, а не "ограничение от 2172 знака за B-дървета" .

Най-важното е, че само за проверки на равенство, както предполага вашият въпрос, btree индекс върху хеш стойност, използвайки md5(old_value) или hashtext(old_value) би било много по-ефикасно. Ако го направите, не забравяйте да се защитавате срещу хеш колизии така:

SELECT *
FROM   record_changes_log_detail 
WHERE  hashtext(old_value) = hashtext('Gold Kerrison Neuro')
AND    old_value = 'Gold Kerrison Neuro';

Първият предикат ви дава бърз достъп до индекса. Вторият изключва фалшивите положителни резултати. Сблъсъците трябва да са изключително редки. Но възможно. И възможността расте с размера на масата.

Свързано:

  • Заявката SELECT с DISTINCT в структура на таблица за графики е много бавна
  • Кой е оптималният тип данни за поле MD5?
  • Пълнотекстово търсене в CouchDB

Или хеш индекс, какъвто вече обмисляте за себе си:

  • Защо хеш индексът на Postgres 11 е толкова голям?

(Тук не е нужно да се притеснявате за хеш колизии; обработват се вътрешно.)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Персонализирано SERIAL / автоматично увеличение на група стойности

  2. Как да оптимизираме логическата репликация на PostgreSQL

  3. Връщане на групиран списък с поява с помощта на Rails и PostgreSQL

  4. Как да променя database_url на heroku?

  5. Как да скриете декорацията на набора от резултати в изхода на Psql