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

SQL индексиране на varchar

Ключове на VARCHAR колоните могат да бъдат много дълги, което води до по-малко записи на страница и повече дълбочина (повече нива в B-Tree ). По-дългите индекси също увеличават коефициента на пропуски в кеша.

Колко низа в средната стойност съответстват на всяко цяло число?

Ако има сравнително малко, можете да създадете индекс само върху цяла колона и PostgreSQL ще извърши финото филтриране на записите:

CREATE INDEX ix_mytable_assoc ON mytable (assoc);

SELECT  floatval
FROM    mytable
WHERE   assoc = givenint
        AND phrase = givenstring

Можете също така да обмислите създаването на индекс върху хешовете на низовете:

CREATE INDEX ix_mytable_md5 ON mytable (DECODE(MD5(phrase), 'HEX'));

SELECT  floatval
FROM    mytable
WHERE   DECODE(MD5(phrase), 'HEX') = DECODE(MD5('givenstring'), 'HEX')
        AND phrase = givenstring -- who knows when do we get a collision?

Всеки хеш е само 16 байта дълги, така че индексните ключове ще бъдат много по-къси, като същевременно запазват почти перфектно селективността.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Функция за връщане на динамичен набор от колони за дадена таблица

  2. Postgres:Добавете ограничение, ако все още не съществува

  3. използвайте \set променлива вътре в блока за деклариране на plpgsql

  4. Как да открия основната заявка на материализиран изглед, който създадох?

  5. Връщане като масив от JSON обекти в SQL (Postgres)