Ускорить SQL-запрос
Добавлено: 2013.05.12, 10:34
Всем доброго времени суток!
Не так давно просили посмотреть один сайтик на Wordpress, так вот некоторые выборки там выполняются просто довольно медленно.
Вкратце, есть таблица wp_postmeta с ~480 000 записей где прожорливый WP хранит аттрибуты постов с вот такой структурой:
У каждого поста есть около десятка записей в этой таблице одна из которых с meta_key='views' и числом просмотров в meta_value, так вот нужно сделать выборку из 3 постов с максимальным количеством просмотров. Я делаю так:
Так вот можно ли как то сделать эту выборку быстрее и как побороть 'Using filesort'?
Не так давно просили посмотреть один сайтик на Wordpress, так вот некоторые выборки там выполняются просто довольно медленно.
Вкратце, есть таблица wp_postmeta с ~480 000 записей где прожорливый WP хранит аттрибуты постов с вот такой структурой:
Код: Выделить всё
+------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------------+------+-----+---------+----------------+
| meta_id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| post_id | bigint(20) unsigned | NO | MUL | 0 | |
| meta_key | varchar(255) | YES | MUL | NULL | |
| meta_value | longtext | YES | | NULL | |
+------------+---------------------+------+-----+---------+----------------+
Код: Выделить всё
SELECT SQL_NO_CACHE meta_value+0 FROM wp_postmeta WHERE meta_key='views' ORDER BY (meta_value+0) DESC LIMIT 3; выполняется за 0,20 сек
Код: Выделить всё
Результат EXPLAIN SELECT SQL_NO_CACHE meta_value+0 FROM wp_postmeta WHERE meta_key='views' ORDER BY (meta_value+0) DESC LIMIT 3;
+----+-------------+---------------------+------+---------------+------+---------+------+--------+----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------------------+------+---------------+------+---------+------+--------+----------------+
| 1 | SIMPLE | wp_postmeta | ALL | NULL | NULL | NULL | NULL | 479223 | Using filesort |
+----+-------------+---------------------+------+---------------+------+---------+------+--------+----------------+