Как мне индексировать эту базу данных MySQL? - PullRequest
4 голосов
/ 03 марта 2010

Я создаю сайт, который позволяет пользователям обмениваться определенными страницами с общественностью.Это похоже на то, как jsbin.com позволяет создавать общедоступный URL-адрес сценария, над которым вы работаете.Базовая таблица MySQL, с которой я сейчас работаю:

CREATE TABLE IF NOT EXISTS `lists` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `hash` varchar(6) NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `hash` (`hash`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Поле key - это столбец, содержащий случайную строку, которую пользователь напечатает в конце URL-адреса.Так, например, если пользователь опубликовал там свою страницу со значением хеш-функции a1b2c3, тогда URL-адрес будет http://mysite.com/a1b2c3

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

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

Спасибо за помощь.

Ответы [ 4 ]

1 голос
/ 03 марта 2010

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

Есть ли другие таблицы и / или столбцы, которые вы не перечислили здесь? Эта таблица имеет небольшую точку за пределами столбца created_at.

0 голосов
/ 03 марта 2010

Да. Важно добавить UNIQUE INDEX для этого столбца. Прежде всего, вы должны быть уверены, что он уникален (ну ... это своего рода идентификатор), и вы будете выполнять множество запросов, таких как:

SELECT .... FROM .... WHERE hash = 'abc323';
0 голосов
/ 03 марта 2010

Да, вам обязательно нужно индексировать столбец hash и, что очень важно, отключить сжатие клавиш.

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

Это может помочь улучшить производительность фраз на человеческом языке, но не поможет хешам.

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

Чтобы отключить сжатие ключей, добавьте PACK_KEYS = 0 в оператор CREATE TABLE.

Обновление:

Это утверждение в вашем CREATE TABLE:

UNIQUE KEY `hash` (`hash`)

эффективно создает индекс UNIQUE для hash, так что он у вас уже есть. Просто убедитесь, что сжатие клавиш отключено.

0 голосов
/ 03 марта 2010

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

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