Оптимизация однострочных запросов из больших таблиц в MySQL

#mysql #optimization

Вопрос:

Я имею дело с таблицами MySQL, которые, по сути, являются результатами моделирования трассировки лучей в моделируемом офисном помещении с одной жалюзи. Обычно мне нужно получить результат моделирования для уникального сочетания настроек времени и слепых. Так что в конечном итоге я делаю много

 SELECT result FROM results WHERE timestamp='2005-05-05 12:30:25' 
         AND opening=40 AND slatangle=60
 

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

Ответ №1:

Ответ наиболее определенно-да. Если вы определяете уникальный индекс по метке времени, открывая и закрывая, MySQL сможет найти вашу строку с очень небольшим количеством запросов на диск.

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

В руководстве MySQL есть раздел об оптимизации запросов.

Ответ №2:

Я бы предложил добавить ОГРАНИЧЕНИЕ 1; в конец запроса.

Уильям

Ответ №3:

Я бы не советовал добавлять 3 индекса. Индекс, использующий все три столбца, может быть лучше, и даже лучше всего установить уникальный первичный ключ в этой комбинации — только если вы уверены, что он уникален.

Ответ №4:

Да, помогает создать индекс из нескольких столбцов. Также вы должны проверить производительность в другом порядке столбцов, т. е. O(c1, c2, c3) != O(c2, c1, c3)

Взглянуть

http://joekuan.wordpress.com/2009/01/23/mysql-optimize-your-query-to-be-more-scalable-part-12/
http://joekuan.wordpress.com/2009/01/23/mysql-optimize-your-query-to-be-more-scalable-part-22/