1

このようなクエリがたくさんあります...

SELECT colA, colB, colC, colD FROM table1 
  LEFT JOIN (
    SELECT colD FROM table2 WHERE colE = 3225 
  ) AS subquery
ON colD = colA ;

これは、サーバーの「log-queries-not-using-indexes」ログにリストされます。

EXPLAINは次のようになります...

id | select_type | table      | type  | possible_keys | key     | key_len | ref  | rows | Extra
---+-------------+------------+-------+---------------+---------+---------+------+------+-------------
 1 | PRIMARY     | table1     | range | PRIMARY       | PRIMARY | 3       | NULL |   58 | Using where
 1 | PRIMARY     | <derived2> | ALL   |          NULL |    NULL |    NULL | NULL |    1 | 
 2 | DERIVED     | table2     | const | PRIMARY       | PRIMARY | 3       |      |    1 | 

クエリを再構築する方法はありますか、またはこれを改善するために追加する必要のある新しいインデックスはありますか?

参考までに、テーブルは次のように構成されています...

CREATE TABLE `table1` (
 `colA` MEDIUMINT( 9 ) NOT NULL ,
 `colB` VARCHAR( 100 ) DEFAULT NULL ,
 `colC` VARCHAR( 6 ) DEFAULT NULL ,
 some more columns removed to simplify things...
 PRIMARY KEY (  `colA` ) ,
 KEY  `colB` (  `colB` ) ,
 KEY  `colC` (  `colC` ) 
) ENGINE = MYISAM DEFAULT CHARSET = latin1 ;


CREATE  TABLE `table2` (
 `colE` mediumint( 9  )  NOT  NULL  auto_increment ,
 `colD` mediumint( 9  ) default  '0',
 some more columns removed to simplify things...
 PRIMARY  KEY (  `colE`  ) ,
 KEY  `colD` (  `colD`  )  
) ENGINE  =  MyISAM  DEFAULT CHARSET  = latin1 ;

前もって感謝します、

あなたのもの

フィル

4

1 に答える 1

0

私は次のことを試します:

SELECT ColA, ColB, ColC, ColD
FROM
    table1
    LEFT JOIN table2
        ON ColE = 3225
        AND ColD = ColA

ColEまた、とColDonの両方をカバーするインデックスを作成してみてくださいtable2

CREATE INDEX `IDX_table2` on `table2` (`colE` ASC, `colD` ASC);
于 2012-10-16T16:55:59.187 に答える