2012-03-05 5 views
0

Я хочу знать о индексах.PHP Индексы MySQL

Я хочу создать индекс на одном из таблиц MySQL (количество строк 300 000). Здесь некоторые столбцы

  • ITEM_ID (первичный ключ)
  • item_name
  • CategoryId
  • DATE_ADDED
  • впечатления
  • посещения

Я хочу создать индекс на categoryid колонке , Я прочитал в других сообщениях, что обновление, вставка, удаление делает обработку медленной, потому что MySQL воссоздает индексы при каждом обновлении. Итак, вот мои вопросы:

  1. Что здесь означает обновление?
  2. Это означает обновление любого столбца любой строки или обновление до этого конкретного индексированного столбца (categoryid здесь).

    Поскольку в этом случае, когда элемент отображается в результатах поиска, показ будет увеличен, и если пользователь посетит страницу объекта, то приращения будут увеличены.

  3. Таким образом, делает это Updation впечатлений и посещения воссоздаст индекса (CategoryId) каждый раз, когда (CategoryID не меняется на обновлений) или это будет только воссоздать индекс, когда CategoryID обновляется или будет добавлена ​​новая строка?

ответ

1

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

+0

Итак, это означает, что я могу создать индекс CategoryID, не беспокоясь о воссоздании индексов за для частого обновления показов и посещений. Благодарю. – kb0000

+2

да, вы можете это –

0

При индексировании столбца любые изменения значений в этом столбце будут обрабатываться «дольше», потому что индекс должен быть восстановлен/применен, хотя это изменение вряд ли будет заметным, если вы не имеете дело с миллионами записей. На обратной стороне, имея индекс, поиск по этим столбцам будет во много раз быстрее. Его компромисс, который вам нужно сделать, но обычно индекс стоит, если вы ищете в этих полях.

1

как это зависит от ... индексирование - это способ оптимизации. Прежде всего вы можете определить медленные запросы с этой записью: log-slow-queries long_query_time = значение в my.cnf Это дает вам представление о необходимости оптимизации.

Далее позвольте MySQL объяснить запрос. самым ценным является possible_keys: item_name, categoryid и используемые ключи ключ: item_name и посмотрите, есть ли: using_filesort. Последний (using_filesort) говорит, что вы должны использовать индекс для сохранения времени ответа

Но!, Потому что есть один ключ для каждой таблицы, используемой также стоит подумать о агрегации в некоторых отношениях:

Комбинированный индекс:

  • (CategoryID, item_name) когда ваш ГДЕ часть categoryid="iao" AND item_name="xyz"
  • (item_name, CategoryID) когда ваш ГДЕ часть item_name="xyz" AND categoryid="iao"

---> заказ важен!

если ваш ГДЕ часть item_name="xyz" AND categoryid="iao" использование двух индексов: 1. Индекс: item_name помогает экономить время 2. Индекс: CategoryID утрачивается Время

наиболее преимущество использования в сочетании индекса вы получите когда ваш WHERE часть использовать ORDER BY например: WHERE часть item_name="xyz" AND categoryid="iao" ORDER BY date_added. В этом случае комбинированный индекс: (item_name, categoryid, date_added) экономит время.

И да сделать это правильный путь:
индексации потреблять время по индексации (DELETE, UPDATE, REPLACE, INSERT) и сэкономить время на каждом SELECT

+0

Я не согласен со следующим утверждением: "комбинированный индекс: (categoryid, item_name), когда ваша часть WHERE является categoryid =" iao "AND item_name =" xyz "или комбинированный индекс: (item_name, categoryid), когда ваша часть WHERE - item_name = "xyz" AND categoryid = "iao" --- порядок важен! " , потому что для части WHERE не имеет значения порядок ключевых частей. Т.е. для ** categoryid = "iao" AND item_name = "xyz" ** и для ** item_name = "xyz" И categoryid = "iao" ** будет использоваться один ключ. Проверьте это с помощью оператора EXPLAIN – Mikhail

Смежные вопросы