5

「ファイルソートの使用」を避けるためにクエリを最適化するためにあなたの助けが必要です.クエリの仕事は、特定のタグに属するすべての記事を選択することです. クエリは次のとおりです。

  select title 
    from tag,
         article 
   where tag = 'Riyad' 
     AND tag.article_id = article.id 
order by tag.article_id

テーブル構造は次のとおりです。

タグテーブル

 CREATE TABLE `tag` (
 `tag` VARCHAR( 30 ) NOT NULL ,
 `article_id` INT NOT NULL ,
 KEY `tag` (`tag`),
 KEY `article_id` (`article_id`)
 ) ENGINE = MYISAM ;

記事表

 CREATE TABLE `article` (
 `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
 `title` VARCHAR( 60 ) NOT NULL
 ) ENGINE = MYISAM 

サンプルデータ

 INSERT INTO `article` VALUES (1, 'About Riyad');
 INSERT INTO `article` VALUES (2, 'About Newyork');
 INSERT INTO `article` VALUES (3, 'About Paris');
 INSERT INTO `article` VALUES (4, 'About London');

 INSERT INTO `tag` VALUES ('Riyad', 1);
 INSERT INTO `tag` VALUES ('Saudia', 1);
 INSERT INTO `tag` VALUES ('Newyork', 2);
 INSERT INTO `tag` VALUES ('USA', 2);
 INSERT INTO `tag` VALUES ('Paris', 3);
 INSERT INTO `tag` VALUES ('France', 3);
4

2 に答える 2

9

表で、キー オンをキー オン ( 、)tagに置き換えます。tagtagarticle_id

ALTER TABLE `tag` DROP INDEX `tag`, ADD INDEX `tag_article_id` (`tag`, `article_id`)

MySQL は、テーブルの 1 つのインデックスのみを使用してクエリを実行します。現在、 のインデックスをtag使用していますが、他のインデックスを使用して ORDER BY を実行することはできません。2 番目の列をインデックスに配置すると、それを使用して ORDER BY を支援します。

于 2010-05-30T16:56:24.587 に答える
0

に部分的に参加してtag.article_id=article.idいますが、それを最適にサポートするためのタグ側にインデックスがありません。にセカンダリ (一意ではない) インデックスを追加しtag.article_idます。

于 2010-05-30T15:57:42.127 に答える