Оптимизация запросов MYSQL: создание отдельных таблиц с помощью ORDER BY, поэтому индексы SELECT ORDER BY не нужны - PullRequest
1 голос
/ 01 июня 2011

Мне интересно, правильна ли моя теория, поэтому обращаюсь за советом к гуру MySQL.

У меня есть таблица, которую я переработал, чтобы просто включить различные элементы, по которым пользователь SELECT может искать запросы. В предложении WHERE есть много перестановок, а затем несколько перестановок, которые они могут захотеть ORDER BY.

Создание мультииндексов для всех практически невозможно, как я вижу, и медлительность может быть вызвана ORDER BY, когда в таблице более 1 миллиона строк.

Моя идея состоит в том, чтобы создать версии результатов, дублированных в других таблицах, но использовать ALTER TABLE, чтобы сделать ORDER BY различными способами, которыми пользователь может ORDER BY.

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

Является ли это разумным способом сделать это для повышения производительности и устойчивости, если таблицы обновляются только один раз и копируются, а при повторном копировании обновляются?

Конечно, я предполагаю, что mysql возвращает строки через LIMIT в порядке сортировки таблицы, если не объявлено ORDER BY в операторе SELECT. Это означало бы, что нет необходимости вставлять ORDER BY в запросе SELECT.

например SELECT * FROM table_order_x WHERE x = 1 AND y = 2 AND z = 3 LIMIT 15000,25; в зависимости от порядка сортировки по таблице.

Будет ли это работать или кто-нибудь должен был придумать что-то подобное? Я пытаюсь мыслить нестандартно.

Ответы [ 2 ]

1 голос
/ 01 июня 2011

это не работает таким образом. Заказ не гарантируется в выбранном списке, если не используется ORDER BY.

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

(p.s. ORDER не происходит, пока ПОСЛЕ определения набора результатов, поэтому весь набор строк в таблице не каким-то образом предварительно упорядочен до выполнения запроса)

0 голосов
/ 01 июня 2011

Это означало бы, что не нужно вставлять ORDER BY в запрос SELECT.

(...) [и], полагаясь на порядок из таблицы sort.

Ваше предположение неверно.В конечном итоге вы получите кортежи в том порядке, в каком они упорядочены на страницах диска, которые будут различаться при их вставке / обновлении / удалении.

...