Индексы мешают друг другу в MySQL? - PullRequest
0 голосов
/ 14 ноября 2010

У меня есть таблица с 3 столбцами.Эта таблица содержит много сырья (миллионы).Когда я выбираю строки из таблицы, я часто использую следующие предложения where:

where column2=value1 and column3=value2
where column1=value  

Чтобы ускорить запрос select, я хочу объявить column1 и column2 в качестве индексов.У меня вопрос , если объявление второго столбца в качестве индекса не уменьшит положительный эффект объявления первого столбца в качестве индекса .

Я также хотел бы спросить, если объявление второго столбца в качестве индексаускорит запросы этого типа: where column2=value1 and column3=value2.

ДОБАВЛЕНО column1, column2 и column3 entity, attribute, value.Это очень общее.В качестве сущностей я использую личность, фильмы, города, страны и так далее.Атрибутами являются такие вещи, как: «находится в», «дата рождения», «произведено».

Ответы [ 2 ]

4 голосов
/ 14 ноября 2010

Вы должны создать индексы, которые поддерживают ваши запросы. В этом случае вы хотите создать индекс для column2,column3 вместе (не два отдельных индекса, а один индекс для комбинации столбцов) для поддержки первого запроса, а другой для column1 для поддержки второй запрос. В более общем случае, если запрос использует набор столбцов, добавление индекса для всех этих столбцов ускорит его (хотя, конечно, существует много исключений).

Индекс на column2 ускорит запрос column2=value1 and column1=value2, как и индекс на column2,column3 (важно то, что column2 является первым столбцом в индексе).

При работе с индексами ключевое слово EXPLAIN очень полезно. Добавьте к вашим запросам EXPLAIN (например, EXPLAIN SELECT * FROM table), чтобы получить описание того, как база данных будет выполнять ваш запрос. Он скажет вам, будет ли он использовать индекс, и в этом случае который.

0 голосов
/ 14 ноября 2010

Похоже, ни один из ваших планов не сработает.Основываясь на обоих пунктах where, я бы предложил иметь первичный ключ для column1 и второй индекс column2,column3.Это ускорит оба ваших запроса.

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