Показать сообщение отдельно
Непрочитано 03.06.2009, 03:07   #5
tramway Мужской

Аватар для tramway
 
В гостях
Регистрация: 21.05.2009
Сообщений: 30
pm
По умолчанию Re: Senior MySQL Index :)

так а где индексы-то?

Я MySQL не знаю, но возможно есть опция посмотреть не результат запроса, а так называемый PLAN, там написан весь порядок - что перебираем, с чем джойним по какому индексу, как отбираем... перебор без индекса напишет типа raw что-нибудь. Индексы бывают разные, в оптимизированной базе одно поле может быть в нескольких индексах, нужно выбирать по юникам/фильтрам/статистике.
13М запросов лучше вообще без SQL делать, а на прямых ссылках, тогда хоть триллион т.к. она вообще ничего не ищет т.к. ничего не теряет.

Нужно знать сами индексы, структуру базы, ее наполнение, статистику значений, повадки оптимизатора. В MySQ эти IF скорее всего оптимизатору не понятны и будут перебираться все записи, лучше

AND post.dateline > IF(threadread.readtime IS NULL , UNIX_TIMESTAMP() - (10*86400 ) , threadread.readtime)

расписать

AND (threadread.readtime IS NULL AND post.dateline > UNIX_TIMESTAMP() - (10*86400 )
OR post.dateline>threadread.readtime) - скобки расставь
тогда если null'ы проиндексированы и оптимизатор разбирает такие выражения, он всего два раза выполнит бинарный поиск, ну а что нужно перебирать его придется перебирать.

поищи слово PLAN в документации

Если база маленькая анализ запроса может выполняться дольше чем сам запрос. Тут куча нюансов, вообще DBA целая профессия, причем нужно знать конкретные сервер-базу-запросы, а не теории. И все равно иногда запросы летают, а добавили одну запись, дурной оптимизатор запросов подсуетился и запрос зависает на сутки.
tramway вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо tramway за это полезное сообщение: