Mysql fix Использование где;
Мой SQL-запрос:
SELECT *
FROM updates_cats
WHERE uid =118697835834
ORDER BY created_date ASC
Текущие индексы:
index1(uid, created_date)
EXPLAIN EXTENDED result:
1 SIMPLE updates_cats ref index1 index1 8 const 2 100.00 Using where
Как я могу исправить поле Extra, в котором он имеет? Использует, где он может использовать индексы вместо?
EDIT: SHOW CREATE TABLE:
CREATE TABLE `updates_cats` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`u_cat_id` bigint(20) NOT NULL DEFAULT '0',
`uid` bigint(20) NOT NULL,
`u_cat_name` text COLLATE utf8_unicode_ci NOT NULL,
`total_updates` int(11) unsigned NOT NULL DEFAULT '0',
`created_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
KEY `index1` (`uid`,`created_date`)
) ENGINE=MyISAM AUTO_INCREMENT=23522 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Ответы
Ответ 1
Единственное, что было бы лучше, чем Using where
, это Using where; Using index
с "индексом покрытия". Попробуйте выбрать только uid
и created_date
.
Using where
отлично. Это означает, что он применяет указанный индекс к предложению WHERE
и сокращает возвращаемые строки. Чтобы избавиться от него, вам нужно избавиться от предложения WHERE
.
Вот о чем вас беспокоит:
-
Using filesort
-
Using temporary
- Не использовать индекс:
NULL
в столбце "ключ" EXPLAIN
и большое количество строк в столбце "rows".
Результат EXPLAIN
показывает, что MySQL применяет index1
к предложению WHERE
и возвращает 2 строки:
1 SIMPLE updates_cats ref index1 index1 8 const 2 100.00 Using where