0

Using filesortフィールドにインデックスが付けられているのに、クエリがであるという問題があります。

これは私の質問です:

EXPLAIN
SELECT u.name, u.surname, u.id
FROM rw_users u
ORDER BY u.created DESC
LIMIT 4

これは出力です:

id  select_type  table  type  possible_keys  key  key_len  ref  rows  Extra           
1   SIMPLE       u      ALL                                     9     Using filesort 

これはcreate table

CREATE TABLE `rw_users` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `created` int(11) unsigned NOT NULL,
  `email` varchar(255) COLLATE utf8_swedish_ci NOT NULL,
  `password` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `name` varchar(100) COLLATE utf8_swedish_ci NOT NULL,
  `surname` varchar(100) COLLATE utf8_swedish_ci NOT NULL,
  `premium` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT 'level or premium membership (0 = standard)',
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`),
  KEY `password` (`password`),
  KEY `created` (`created`),
  KEY `premuim` (`premium`),
  KEY `name_surname` (`name`,`surname`),
  CONSTRAINT `FK_rw_users` FOREIGN KEY (`premium`) REFERENCES `rw_premium` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci

取り除くために私は何をする必要がありUsing filesortますか?118行のデータベース(まったく同じテーブル)でテストしましたが、それでもUsing filesort表示されるため、インデックスを使用するよりも高速であるため、使用できません。

4

1 に答える 1

2

一部のクエリで最高のパフォーマンスを得るには、カバーするインデックスを追加します。ここを参照してください:

ALTER TABLE rw_users ADD KEY ix1 (created, name, surname, id);

インデックスにINNODB含める必要のないエンジンの場合はid、両方のインデックスをでチェックしますEXPLAIN

ALTER TABLE rw_users ADD KEY ix1 (created, name, surname);
于 2012-08-31T09:54:37.517 に答える