web-dev-qa-db-ja.com

mysqlの修正whereの使用;

私の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
19
stergosz

Using whereよりも優れているのはUsing where; Using indexと「カバーインデックス」だけです。 uidcreated_dateだけを選択してみてください。

Using whereは問題ありません。これは、示されたインデックスをWHERE句に適用し、返される行を減らすことを意味します。それを取り除くには、WHERE句を取り除く必要があります。

ここにあなたが心配しなければならないことがあります:

  • Using filesort
  • Using temporary
  • インデックスを使用しない:NULLの「key」列にEXPLAINがあり、「rows」列に多数の行があります。

EXPLAINの結果は、MySQLがindex1WHERE句に適用し、2行を返していることを示しています。

1 SIMPLE updates_cats ref index1 index1 8 const 2 100.00 Using where
38
Marcus Adams