PHP MySQL Indexes - PullRequest
       3

PHP MySQL Indexes

0 голосов
/ 05 марта 2012

Я хочу знать об индексах.

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

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

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

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

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

  3. Итак, будет ли это обновление впечатлений и посещений воссоздавать index (categoryid) каждый раз (categoryid не изменяется на обновлений) или он будет воссоздавать индекс только при обновлении categoryid или новая строка добавлена?

Ответы [ 3 ]

1 голос
/ 05 марта 2012

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

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

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

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

  • (categoryid, item_name) когда ваша WHERE часть равна categoryid="iao" AND item_name="xyz"
  • (item_name, categoryid) когда ваша WHERE часть равна item_name="xyz" AND categoryid="iao"

---> порядок важен!

если ваша WHERE часть равна item_name="xyz" AND categoryid="iao", используйте два индекса: 1. index: item_name помогает экономить время 2. index: 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

1 голос
/ 05 марта 2012

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

0 голосов
/ 05 марта 2012

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

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