Индекс одного столбца / нескольких столбцов, что лучше? - PullRequest
0 голосов
/ 16 июня 2011

У меня одна неэффективная процедура с несколькими запросами.

Я обнаружил несколько запросов к временным таблицам, которые сканируют временные таблицы. Я решил добавить индекс на временную таблицу, чтобы избежать сканирования таблицы. Я заметил, что есть несколько столбцов временной таблицы, которые используются в предложении where. Однако я не уверен, следует ли включать все столбцы в один индекс (составной индекс) или несколько индексов с одним столбцом в каждом индексе, чтобы получить максимальную производительность.

База данных DB2

Ответы [ 2 ]

0 голосов
/ 16 апреля 2014

В случае MySQL можно использовать индексы с несколькими столбцами для запросов, которые проверяют все столбцы в индексе, или запросов, которые проверяют только первый столбец, первые два столбца, первые три столбца и т. Д.

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

Допустим, у вас есть INDEX nameIdx (last_name,first_name) созданный в таблице test

Поэтому индекс nameIdx используется для поиска в следующих запросах:

SELECT * FROM test WHERE last_name='Widenius';

SELECT * FROM test
  WHERE last_name='Widenius' AND first_name='Michael';

SELECT * FROM test
  WHERE last_name='Widenius'
  AND (first_name='Michael' OR first_name='Monty');

где в качестве имени nameIdx не используется для поиска в следующих запросах:

SELECT * FROM test WHERE first_name='Michael';

SELECT * FROM test
  WHERE last_name='Widenius' OR first_name='Michael';

для более подробной информации см. URL

Обобщение этого: если вы используете столбцы в предложении where, как указано в порядке индекса (слева направо), то это лучше, чем индекс по одному столбцу

0 голосов
/ 18 сентября 2011

Все это в значительной степени зависит от ваших запросов и данных на вашем столе.Как правило, вы должны включать только столбцы, которые значительно уменьшают результирующие строки.

Если предложение where для первого ограничивающего столбца уже отбрасывается, например, на 90% строк, а следующее уменьшит только несколькоСто строк больше не стоит ресурсов для включения в индекс.Всегда имейте в виду, что ядро ​​базы данных сначала работает с первым столбцом составного индекса, а затем переходит к следующим.Если в ваших запросах столбцы расположены в другом порядке, индекс потенциально может даже начать замедляться.

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

...