私のSQLクエリ:
SELECT *
FROM updates_cats
WHERE uid =118697835834
ORDER BY created_date ASC
現在のインデックス:
index1(uid, created_date)
EXPLAIN EXTENDEDの結果:
1 SIMPLE updates_cats ref index1 index1 8 const 2 100.00 Using where
代わりにインデックスを使用できるように、Using whereがあるExtraフィールドを修正するにはどうすればよいですか?
編集: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
Using where
よりも優れているのはUsing where; Using index
と「カバーインデックス」だけです。 uid
とcreated_date
だけを選択してみてください。
Using where
は問題ありません。これは、示されたインデックスをWHERE
句に適用し、返される行を減らすことを意味します。それを取り除くには、WHERE
句を取り除く必要があります。
ここにあなたが心配しなければならないことがあります:
Using filesort
Using temporary
NULL
の「key」列にEXPLAIN
があり、「rows」列に多数の行があります。EXPLAIN
の結果は、MySQLがindex1
をWHERE
句に適用し、2行を返していることを示しています。
1 SIMPLE updates_cats ref index1 index1 8 const 2 100.00 Using where