Полезны или нет несколько индексов, включающих один и тот же столбец? - PullRequest
2 голосов
/ 29 февраля 2012

У меня есть таблица кликов, которая записывает клики мышью по всему сайту Схема выглядит следующим образом:

enter image description here

Для этих данных запущено 3 основных запроса:

  • "ВЫБРАТЬ * ГДЕ pageid = xxxx"
  • "ВЫБРАТЬ * ГДЕ visitorid = xxx И pageid = xxxx"
  • «ВЫБЕРИТЕ посетителя, МИН. (Время) КАК мин. Время ГДЕ pageid = xxxx GROUP BY посетитель»

В будущем я мог бы также использовать maintestid в запросах. Так это будет выглядеть так:

  • "ВЫБРАТЬ * ГДЕ maintestid = xxxx"

Итак, я добавил 2 индекса в таблицу для обоих этих запросов вместе с первичным ключом так:

enter image description here

У меня есть 3 вопроса:

  1. Является ли этот первичный ключ полезным, если так? Или я должен сделать это только для столбца идентификаторов?

  2. Полезен ли индекс pageid вообще? Или это будет так же быстро, если все запросы для pageid будут обрабатываться индексом pageid_visid?

  3. Когда в будущем я захочу выполнить поиск через maintestid, нужно ли просто добавить индекс в столбец maintestid или что-то другое?

Ответы [ 2 ]

4 голосов
/ 29 февраля 2012
  1. Первичный ключ НЕ полезен, так как он у вас есть - другие столбцы этого индекса никогда не будут использоваться. Просто сделайте это в id столбце только
  2. Индекс только pageid немного полезен в том смысле, что его записи будут помещаться на меньших страницах индекса, но я бы отбросил его и позволил mysql использовать другой индекс на основе pageid (выполнить тест производительности для подтверждения)
  3. Да - укажите ваши индексы в соответствии с вашими важными запросами
0 голосов
/ 29 февраля 2012

Зачем вам это нужно?

В любом случае, если вы хотите, чтобы они указали pageid, pageid_visid и maintestid в качестве индексов, тогда все в порядке ... но будет лучше, если у вас будет только один идентификатор в качестве основного, поскольку он более уместен. в любом случае, вы можете запросить их все, используя другой идентификатор

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