MySQL выберите по индексированным столбцам - PullRequest
4 голосов
/ 30 июля 2011

Я новичок в MySQL и у меня есть несколько вопросов, о которых я не смог найти никакой информации.Вот что я пытаюсь сделать:

У меня есть база данных с 5 столбцами: id, c1, c2, c3, c4 id - это PRIMARY KEY, каждая строка уникальна для c1, c2, c3, c4 (если есть терминология, которую вы, ребята, используете для этого, дайте мне знать об этом тоже:))

Мне нужно иметь возможность искать существующую строку в таблице, поэтому я подумал поставить INDEX на c1, что уменьшитколичество строк от 10 000 (не более 100 000) до пары.Мои вопросы:

  1. Сколько строк вы оцениваете, прежде чем выигрыш в производительности индекса станет "стоящим"?Больные / анекдотичные ответы в порядке.

  2. Нужен ли какой-либо специальный синтаксис, чтобы сказать MySQL использовать INDEX?Прямо сейчас я делаю «SELECT id ИЗ таблицы, ГДЕ c1 =« бла »И c2 =« бла »И c3 =« бла »И c4 =« бла »», и я не уверен, помогает ли ИНДЕКС запрос ввсе.

  3. Любые другие предложения для лучшего способа запроса приветствия таблицы, просто имейте в виду, что я новичок !!:)

Заранее спасибо!

1 Ответ

1 голос
/ 30 июля 2011

Я полагаю, что индекс "стоит того", зависит от того, насколько быстро вам нужно выполнить запрос. Только с сотнями записей это будет "довольно" быстро в любом случае. Но в любом случае индекс должен быть быстрее, потому что вам не нужно читать все (в некоторых случаях любые ) записи на диске. Даже запрос, который занимает 0,02 с без индекса, может выполняться с 0,0004 с одним. Как только вы попадете в тысячи строк, вам определенно понадобится индекс. Таким образом, вы также можете всегда использовать индекс для любых столбцов, используемых в предложениях JOIN или WHERE, независимо от количества строк.

MySQL должен использовать ваш индекс. Вы можете проверить, запустив запрос EXPLAIN. (Просто добавьте EXPLAIN перед вашим запросом, например EXPLAIN SELECT * FROM....) Он покажет, какой индекс используется, если есть. Помните, что вы должны использовать столбцы в порядке, указанном в составном индексе . Поэтому, если ваш индекс c1-c2-c3-c4, вы не можете просто использовать его для c4, не используя также другие столбцы.

Итак, SELECT * FROM table WHERE c1 = 'foo' AND c4 = 'bar' будет использовать ваш индекс для c1 = 'foo', но он не сможет использовать его для c4 = 'bar', потому что вы не используете c2 или c3. Поскольку вы используете все четыре столбца в индексе, индекс должен использоваться для всех них. Имеет смысл?

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