Среди нескольких столбцов в предложении where один столбец не индексируется - Nuo Database - PullRequest
0 голосов
/ 02 апреля 2020

Пожалуйста, рассмотрите таблицу "TABLE" в базе данных NuoDB, которая состоит из 70 миллионов записей. Также рассмотрим столбцы, представленные в «TABLE»: column_1, columne_2, column_3, column_4 и column_5. Среди приведенных выше столбцов column_1 - это первичный ключ. И column_1, column_2 и column_3 проиндексированы.

Теперь у нас есть требование выполнить запрос SQL следующего шаблона:

select * from TABLE where column_2 = ? and column_3 = ? and column_4 = ?

Мы видим, что column_2 и column_3 уже проиндексированы и, следовательно, нет проблем с этим. Но column_4 не индексируется.

Будет ли это иметь значение? Обязательно ли включать column_4 в качестве индексированного столбца?

1 Ответ

1 голос
/ 22 апреля 2020

Это не обязательно. Будет ли это иметь значение? Это зависит от ваших данных. NuoDB имеет приличный оптимизатор, поэтому он будет смотреть на этот запрос и сначала выполнять сканирование индексов для column_2 и column_3. Но как только он получит этот частичный результат, ему придется загружать атомы для каждой из оставшихся записей, чтобы обработать последнюю часть предиката.

Так что, если у вас есть 7000000 записей в таблице и 90% из них совпадают column_2 =? и column_3 = ?. тогда это будет иметь большое значение. Если только 7 записей совпадают с column_2 и column_3, это не имеет большого значения.

Запустите EXPLAIN для запроса и посмотрите, каков будет план оптимизатора. Эта страница поможет вам интерпретировать результаты.

...