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

Сканиране на индекс за сравнение в няколко колони - неравномерно подреждане на колони на индекси

PostgreSQL внедрява кортежите много старателно (за разлика от половинчатите реализации, открити в Oracle, DB2, SQL Server и т.н.). Можете да напишете условието си, като използвате „неравенство на кортежи“, както в:

select * 
from table1
where (a, -b, c) >= (10, -20, 30)
order by a, -b, c
limit 10

Моля, обърнете внимание, че тъй като втората колона е в низходящ ред, трябва да "обърнете" нейната стойност по време на сравнението. Ето защо се изразява като -b и също, -20 . Това може да е трудно за нечислови колони като дати, varchar, LOB и т.н.

И накрая, използването на индекс все още е възможно с -b стойност на колона, ако създадете ad-hoc индекс, като например:

create index ix1 on table1 (a, (-b), c);

Въпреки това, никога не можете да принудите PostgreSQL да използва индекс. SQL е декларативен език, а не императивен. Можете да примамите да го направи, като поддържа актуални статистиките на таблицата, а също и като избира малък брой редове. Ако вашият LIMIT е твърде голям, PostgreSQL може да е склонен да използва вместо това сканиране на пълна таблица.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pg_stat_activity - как да видите текущата активност в работеща съхранена процедура

  2. Как да премахнете условията от клаузата WHERE, ако параметрите са NULL

  3. Как да четете REST услуга, която връща JSON обект и да съхранявате същото в PostgreSQL с помощта на Mule ESB, Mule Studio

  4. Нулирайте първичния ключ на PostgreSQL на 1

  5. Могат ли две временни таблици с едно и също име да съществуват в отделни заявки