Postgresql, используя индекс между - PullRequest
0 голосов
/ 14 июля 2011

У меня есть индекс по столбцу, скажем, ID (bigint). Если у меня есть запрос с чем-то вроде этого:

SELECT * 
  FROM table 
 WHERE id = 12345

... будет использоваться индекс. Но когда я использую запрос, как ...

SELECT * 
  FROM table 
 WHERE id >= 12345 
   AND id <= 12366

Используется последовательное сканирование, которое очень медленное. Могу ли я принудительно использовать индекс индекса?

Ответы [ 2 ]

2 голосов
/ 14 июля 2011

Должен использоваться индекс, если тип индекса btree и select не выбирает более 30% от общего количества записей (верно ли это и в postgresql?) @ scott-marloweговорит, что "... для PostgreSQL точка переключения наступает намного раньше, где-то в диапазоне от 1 до 10%, где дешевле делать последовательное сканирование ..".

Попробуйте вызвать действие REINDEX, может быть?

1 голос
/ 14 июля 2011

Я не использую postgresql, но вам нужно сделать следующее.

  • Посмотрите на план запроса, чтобы убедиться, что он не использует индекс.
  • В sybase выможет заставить запрос использовать определенный индекс с помощью «подсказки индекса»

Похоже, этот вопрос дает именно то, что вы хотите. Как заставить Postgres использовать определенный индекс?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...