MySQL easter egg
Есть два запроса:
SELECT * FROM `entities_categories` WHERE category IN('16325') AND entity IN ('used') ORDER BY category;
и
SELECT * FROM `entities_categories` WHERE category IN (SELECT id FROM entity_core_category WHERE id IN('16325') ORDER BY path) AND `entity` IN ('used');
Первый выполняется за 1.47 секунды, второй за .... 0,81 секунды! Неожиданно, верно? Начинаем разбираться:
mysql> desc SELECT * FROM `entities_categories` WHERE category IN('16325') AND entity IN ('used') ORDER BY category;
| id | 1 |
| select_type | SIMPLE |
| table | entities_categories |
| type | ref |
| possible_keys | PRIMARY,category |
| key | category |
| key_len | 70 |
| rows | 63300 |
| Extra | Using where; Using filesort |
mysql> desc SELECT * FROM `entities_categories` WHERE category IN (SELECT id FROM entity_core_category WHERE id IN('16325') ORDER BY path) AND `entity` IN ('used');
| id | 1 | 2 |
| select_type | PRIMARY | DEPENDENT SUBQUERY |
| table | entities_categories | entity_core_category |
| type | ref | const |
| possible_keys | PRIMARY | PRIMARY |
| key | PRIMARY | PRIMARY |
| key_len | 66 | 4 |
| ref | const | const |
| rows | 287754 | 1 |
| Extra | Using where | Using index |
Я не хочу понять это. Я хочу знать: как с ЭТИМ работать?
0 коммент.:
Отправить комментарий