Почему MySQL не использует индекс?
MySQL не будет использовать индекс, если это значение имеет большой процент строк.
Почему добавление use index
к запросу здесь не работает
Добавление предложения use index
не будет иметь никакого эффекта, поскольку use index
будет только предлагать какой индекс использовать, но не будет предлагать, использовать индекс или нет.
Предупреждение при использовании тестовых таблиц с несколькими строками
Это особенно неприятно при использовании тестовых таблиц с несколькими строками, поскольку MySQL откажется использовать индекс, и трудно понять, что не так с вашим запросом.
Поэтому убедитесь, что вы добавили достаточно строк в тестовую таблицу, чтобы сделать ее реалистичной.
Бесполезно ли использование индекса для столбцов с низким числом элементов?
Индексирование по логическим столбцам не так полезно , как вы думали, прежде чем задавать этот вопрос.
Однако это также не бесполезно либо.
С InnoDB MySQL будет пытаться получать данные, используя индексы, если это возможно, если ваше логическое поле имеет индекс запроса:
SELECT id, bool_field FROM table_with_many_columns_and_rows WHERE bool_field = 1
Может считывать все данные в покрывающем индексе для bool_field
, потому что вторичные индексы в InnoDB всегда включают первичный индекс (id) .
Это быстрее, потому что MySQL не должен читать всю таблицу в память.
В MyISAM это не работает, и MySQL проверит всю таблицу.
Но я могу использовать force index
Вы можете, но при низких показателях кардинальности ваш запрос будет выполняться медленнее, а не быстрее.
Переопределять индексы только для сложных запросов и только , только если вы знаете правила, используемые MySQL для выбора индексов.
Ссылки:
См .: http://dev.mysql.com/doc/refman/5.1/en/mysql-indexes.html
и: http://www.xaprb.com/blog/2006/07/04/how-to-exploit-mysql-index-optimizations/
Если вам нужна книга на эту тему: прочитайте
Высокая производительность MySQL: http://oreilly.com/catalog/9780596003067