fxu*_*ser 16 mysql sql indexing query-optimization where
我的SQL查询:
SELECT *
FROM updates_cats
WHERE uid =118697835834
ORDER BY created_date ASC
Run Code Online (Sandbox Code Playgroud)
目前指数:
index1(uid, created_date)
Run Code Online (Sandbox Code Playgroud)
EXPLAIN EXTENDED结果:
1 SIMPLE updates_cats ref index1 index1 8 const 2 100.00 Using where
Run Code Online (Sandbox Code Playgroud)
如何修复Extra字段使用哪里可以使用索引?
编辑:显示创建表:
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
Run Code Online (Sandbox Code Playgroud)
Mar*_*ams 38
这将是好过的唯一的事情Using where是Using where; Using index一个"覆盖索引".尝试选择只是uid和created_date.
Using where很好.这意味着它将指示的索引应用于WHERE子句并减少返回的行.要摆脱它,你必须摆脱该WHERE条款.
以下是您应该关注的事项:
Using filesortUsing temporaryNULL在EXPLAIN'rows'列中的'key'列和大量行中.您的EXPLAIN结果显示MySQL正在应用于index1该WHERE子句并返回2行:
1 SIMPLE updates_cats ref index1 index1 8 const 2 100.00 Using where
Run Code Online (Sandbox Code Playgroud)