Задавайте вопросы, мы ответим
Вы не зашли.
Бодрого времени суток!
Передо мною постала задача - ускорить работу базы. В таблице порядка 3кк записей, есть несколько индексов, экспериментирую на конкретном запросе с ипользованием поиска по 8 полям. Специально для этого создал новый индекс, включающий поля поиска.
При созданном индексе по двум полям, эксплейн запроса показал следующее:
key_len ref rows
7 const,const 87
При созданном индексе по четырём полям, эксплейн запроса показал такое:
key_len ref rows
11 const,const,const,const 1
Естественно во втором случае в индексе оказалось значительно больше элементов, чем в первом.
пхпмайадмин показал примерно одинаковое время выполнения запроса на обоих индексах.
Возникает вопрос, какой индекс более "ровный"? На что стоит обращать внимание при построении индекса? На его длину или на количество элементов в нём?
Неактивен
Возможно в Вашем запросе добавление полей к индексу его уже не ускоряет (так как и так быстро). Увеличивая размер индекса, Вы замедляете вставку и несколько замедляете поиск (так как требуется считывать более длинный индекс). При создании индекса следует максимизировать CARDINALITY ( SHOW INDEX FROM имя_таблицы), но при этом сохраняя разумный объем и количество индексов, чтобы INSERT и UPDATE не стали доминировать по ресурсам.
Посмотрите также тему здесь: http://sqlinfo.ru/forum/viewtopic.php?id=151
Неактивен
Ага, кое-что понял новое для себя, спасибо
А вот по поводу "максимизировать CARDINALITY" наверное не правильно понял, ибо вижу противоречие. Ведь большее количество CARDINALITY увеличивает длину индекса, а ранее было сказано "Увеличивая размер индекса, Вы замедляете вставку и несколько замедляете поиск". Поясните плз.
Кстати, в данной ситуации, для INSERT и UPDATE в конфиге поставил меньший приоритет.
Неактивен
А вот по поводу "максимизировать CARDINALITY" наверное не правильно понял, ибо вижу противоречие. Ведь большее количество CARDINALITY увеличивает длину индекса, а ранее было сказано "Увеличивая размер индекса, Вы замедляете вставку и несколько замедляете поиск". Поясните плз.
Это не противоречие, а компромисс. Вам следует максимизировать CARDINALITY, при этом сохраняя объем индекса в разумных пределах. Могут быть разные варианты. Учитывайте, что для MyISAM производительности сильно растет если индекс полностью влезает в кэш (кстати статья: http://sqlinfo.ru/articles/info/3.html). Может быть так, что памяти у Вас много и индексы влезают с запасом в кэш, тогда их можно расширять и дополнять ради ускорения поиска. Если кэш становится узким местом, то следует сократить индексы.
Нельзя приступать к оптимизации производительности, если Вы не выявили узкие места. Так как я отвечал на общий вопрос, то и ответ был общий, содержащий две крайности (наиболее быстрый поиск, наиболее быстрая вставка). Практика все ставит на свои места.
Неактивен
Спасибо за разъяснения, будем учиться дальше
Неактивен