Использование индекса по нескольким столбцам - PullRequest
1 голос
/ 16 июля 2010

Если я построил индекс btree по столбцам (один, два, три, четыре, пять), он будет использоваться для запроса с блоком where:

(1) ... WHERE one = 1 AND two = 2 AND three = 3 AND four = 4 -- no five

или

(2) ... WHERE two = 2 AND one = 1 -- wrong sequence, no five

или

(3) ... WHERE one = 1 AND three = 3 AND two = 2 AND five = 5 AND four = 4 -- wrong sequence

Ответы [ 2 ]

1 голос
/ 16 июля 2010

Поскольку «А И В» логически эквивалентны «В И А», операторы, которые вы даете, логически эквивалентны операторам, в которых предложения перечислены в последовательном порядке. Поскольку база данных сможет выполнять эту простую перезапись, она сможет использовать индекс, где она может использовать индекс для последовательно перечисленных предложений.

Вероятно, будет возможно создать операторы, которые логически эквивалентны последовательно упорядоченным операторам, но которые база данных не может преобразовать. Это связано с тем, что создание логических эквивалентов может быть нетривиальной задачей.

1 голос
/ 16 июля 2010

Да, во всех ваших случаях, потому что базы данных обычно не беспокоятся о порядке операторов в вашем предложении WHERE.Тем не менее, он вряд ли будет использоваться

WHERE two = 2 AND three = 3 -- no one

Поскольку один из них является первым компонентом вашего индекса, но не появляется в предложении where

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