Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Индексы
 
 автор: iv4art   (18.02.2012 в 19:04)   письмо автору
 
 

1. Насколько я понял, индексы позволяют ускорить выполнение запросов с предикатами, но лишь в тех случаях, если индексные поля участвуют в условии запроса. Т. е. если в проекте я произвожу выборки не только по полям с первичными ключами, но и по полям с внешними ключами, а также по обычным полям, которые не используются для создания отношений, то все эти поля следует обозначать как индексы, дабы ускорить время выполнения запроса?

2. А если индекс составной, например из двух полей, а в условии используется только одно поле из этого индекса, то становится ли MySQL от этого легче?

3. Если в поиске использую оператор LIKE - какой тип индекса применять к полю? Ведь полнотекстовой индекс используется в связке с MATCH...AGAINST, а обычный индекс берет первые n символов.

4. Участвуют ли индексы в сортировке? И что в таком случае с составными индексами (по аналогии с пунктом 2).

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

  Ответить  
 
 автор: cheops   (18.02.2012 в 19:16)   письмо автору
 
   для: iv4art   (18.02.2012 в 19:04)
 

1. Да, если вы хотите ускорить SELECT-запросы, индексы замедляют UPDATE/DELETE/INSERT-запросы.

  Ответить  
 
 автор: cheops   (18.02.2012 в 19:18)   письмо автору
 
   для: iv4art   (18.02.2012 в 19:04)
 

2. Да может использовать только первое поле, однако, составные поля обычно используют для ускорения сложных условий... например у вас в WHERE-конструкции используется два поля, вы можете создать индекс на этих двух полях, чтобы ускорить запрос. В противном случае если индекс не подойдет (например, он лишь по одному из полей) будет полный скан таблицы.

  Ответить  
 
 автор: cheops   (18.02.2012 в 19:21)   письмо автору
 
   для: iv4art   (18.02.2012 в 19:04)
 

3. Это зависит от типа поля
4. Индексы сами по себе отсортированы. В пункте 2 не верное утверждение
5. Вы действительно хотите использовать 16 индексов? Как правило, такое их количество говорит о том, что разработчик не совсем понимает что из себя представляют индексы и не очень отслеживает реальную эффективность, которую они привносят. Индексы следует применять очень аккуратно, если у вас в таблице их больше трех, подумайте над своей базой данных и таблицей еще раз.

  Ответить  
 
 автор: iv4art   (19.02.2012 в 02:36)   письмо автору
 
   для: cheops   (18.02.2012 в 19:21)
 

К сожалению только недавно начал разбираться в этой теме, до этого использовал только Primary. Пока сочинял ответ понял, что много индексов и правда скорее всего не будет, как ни крути. Спасибо.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования