У меня прибл. 200 тыс. Строк в таблице tb_post
, а каждые 5 минут - ок. 10 новых вставок.Как повысить производительность MySQL-запроса с частыми ставками вставки?
Я использую следующий запрос для выборки строк -
SELECT tb_post.ID, tb_post.USER_ID, tb_post.TEXT, tb_post.RATING, tb_post.CREATED_AT,
tb_user.ID, tb_user.NAME
FROM tb_post, tb_user
WHERE tb_post.USER_ID=tb_user.ID
ORDER BY tb_post.RATING DESC
LIMIT 30
Это занимает более 10SEC, чтобы извлечь все строки в отсортированной моде.
Ниже приводится отчет EXPLAIN запроса:
id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE tb_user ALL PRIMARY NULL NULL NULL 20950 Using temporary; Using filesort 1 SIMPLE tb_post ref tb_post_FI_1 tb_post_FI_1 4 tb_user.id 4
Несколько входов:
tb_post.RATING
является тип Float- Существует индекс
tb_post.USER_ID
Может кто-нибудь предложить мне несколько указаний о том, как мне это оптимизировать запросить и улучшить производительность чтения?
PS: Я новичок в вопросах масштабирования базы данных. Поэтому любые предложения будут полезны для этого запроса.
Почему вы не хотите индексировать? –
Извините за путаницу. Я исправил свой вопрос. Я хочу индексировать, и USER_ID уже проиндексирован, но он по-прежнему не помогает. Вопрос в том, должен ли я индексировать и другие столбцы, и если да, то какие? – Aditya
Maybee вам следует подумать об использовании операции JOIN и остерегаться того, что вы присоединяетесь к своим столам - сначала меньше. Но это зависит от используемой вами базы данных. Подробнее http://stackoverflow.com/questions/173726/when-and-why-are-database-joins-expensive/173744#173744 –