2016-10-24 3 views
0

私は自分のデータベース(mysql)の大きなテーブルで作業しています。私のクエリの中には5分以上実行しているものがあります。ここでは遅い実行している私のクエリの例である:ここ長時間実行されているクエリのMySQLインデックス作成 - キーは使用されていますか?

select b.DESCRIPTION collateral_type, a.description brand, a.year, 
     a.model, a.plate_number, d.description fuel, a.chassis_number, 
     a.engine_number, c.description as color, insurance_name 
from lms_loan_application_collateral a inner join 
    lms_collateral_type b 
    on a.COLLATERAL_TYPE_ID = b.id left join 
    lms_color c 
    on a.color_id = c.id left join 
    lms_fuel_type d 
    on a.fuel_type_id = d.id inner join 
    lms_loan_application e 
    on e.id = a.loan_application_id inner join 
    lms_dlr_dtl f 
    on e.code = f.lano inner join 
    lms_loanapp_dtl g 
    on f.lano = g.lano 
where b.description in ('Motorcycle', 'Automotive', 'Heavy Equipment'); 

は、MySQLは、キー列の下にクエリ

+----+-------------+-------+-------+--------------------------------------------------------+-------------------------+---------+------------+-------+----------------------------------------------------+ 
    | id | select_type | table | type | possible_keys           | key      | key_len | ref  | rows | Extra            | 
    +----+-------------+-------+-------+--------------------------------------------------------+-------------------------+---------+------------+-------+----------------------------------------------------+ 
    | 1 | SIMPLE  | g  | index | lms_loanapp_dtl_lano         | lms_loanapp_dtl_lano | 23  | NULL  | 23432 | Using where; Using index       | 
    | 1 | SIMPLE  | f  | ref | lano             | lano     | 23  | new.g.LANO |  1 | Using index          | 
    | 1 | SIMPLE  | b  | ALL | lms_collateral_type_description,lms_collateral_type_id | NULL     | NULL | NULL  | 11 | Using where; Using join buffer (Block Nested Loop) | 
    | 1 | SIMPLE  | a  | ref | collateral_type_id          | collateral_type_id  | 5  | new.b.ID | 4067 | Using index condition        | 
    | 1 | SIMPLE  | e  | ref | lms_loan_application_id        | lms_loan_application_id | 153  | func  |  1 | Using index condition; Using where     | 
    | 1 | SIMPLE  | c  | ALL | LMS_color_id           | NULL     | NULL | NULL  | 20 | Range checked for each record (index map: 0x1)  | 
    | 1 | SIMPLE  | d  | ALL | LMS_fuel_type_id          | NULL     | NULL | NULL  |  4 | Using where; Using join buffer (Block Nested Loop) | 
    +----+-------------+-------+-------+--------------------------------------------------------+-------------------------+---------+------------+-------+----------------------------------------------------+ 

の説明で、NULL値があります。 mysqlが作成したインデックスキーを使用するかどうかはわかりません。以下は

私は関連するテーブルのために作成されたインデックスのリストである:新しいFROM lms_loan_application_collat​​eral FROM

SHOWのINDEX。

+---------------------------------+------------+---------------------+--------------+---------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 
    | Table       | Non_unique | Key_name   | Seq_in_index | Column_name   | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | 
    +---------------------------------+------------+---------------------+--------------+---------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 
    | lms_loan_application_collateral |   1 | color_id   |   1 | color_id   | A   |   36 |  NULL | NULL | YES | BTREE  |   |    | 
    | lms_loan_application_collateral |   1 | fuel_type_id  |   1 | fuel_type_id  | A   |   6 |  NULL | NULL | YES | BTREE  |   |    | 
    | lms_loan_application_collateral |   1 | loan_application_id |   1 | loan_application_id | A   |  89493 |  NULL | NULL | YES | BTREE  |   |    | 
    | lms_loan_application_collateral |   1 | collateral_type_id |   1 | collateral_type_id | A   |   22 |  NULL | NULL | YES | BTREE  |   |    | 
    +---------------------------------+------------+---------------------+--------------+---------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 

「lms_collat​​eral_type FROM new」;

+---------------------+------------+---------------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 
    | Table    | Non_unique | Key_name      | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | 
    +---------------------+------------+---------------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 
    | lms_collateral_type |   1 | lms_collateral_type_description |   1 | DESCRIPTION | A   |   11 |  NULL | NULL | YES | BTREE  |   |    | 
    | lms_collateral_type |   1 | lms_collateral_type_id   |   1 | ID   | A   |   11 |  NULL | NULL | YES | BTREE  |   |    | 
    +---------------------+------------+---------------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 

lust_color FROM new;

+-----------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 
    | Table  | Non_unique | Key_name  | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | 
    +-----------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 
    | lms_color |   1 | LMS_color_id |   1 | id   | A   |   20 |  NULL | NULL |  | BTREE  |   |    | 
    +-----------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 

lust_fuel_type FROM new;

+---------------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 
    | Table   | Non_unique | Key_name   | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | 
    +---------------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 
    | lms_fuel_type |   1 | LMS_fuel_type_id |   1 | id   | A   |   4 |  NULL | NULL | YES | BTREE  |   |    | 
    +---------------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 

からの明示的なインデックスlms_loan_application FROM new;

+----------------------+------------+-------------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 
    | Table    | Non_unique | Key_name    | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | 
    +----------------------+------------+-------------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 
    | lms_loan_application |   1 | lmspis_id    |   1 | PIS_ID  | A   |  1878 |  NULL | NULL | YES | BTREE  |   |    | 
    | lms_loan_application |   1 | loan_type_id   |   1 | LOAN_TYPE_ID | A   |   6 |  NULL | NULL | YES | BTREE  |   |    | 
    | lms_loan_application |   1 | lms_loan_application_id |   1 | ID   | A   |  1878 |  NULL | NULL | YES | BTREE  |   |    | 
    +----------------------+------------+-------------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 

lm_dlr_dtlからのSHOW INDEX FROM new;新しいFROM lms_loanapp_dtl FROM

+-------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 
    | Table  | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | 
    +-------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 
    | lms_dlr_dtl |   0 | PRIMARY |   1 | LDDID  | A   |  90066 |  NULL | NULL |  | BTREE  |   |    | 
    | lms_dlr_dtl |   1 | lano  |   1 | LANO  | A   |  90066 |  NULL | NULL | YES | BTREE  |   |    | 
    +-------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 

SHOWのINDEX。

+-----------------+------------+----------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 
    | Table   | Non_unique | Key_name    | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | 
    +-----------------+------------+----------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 
    | lms_loanapp_dtl |   0 | PRIMARY    |   1 | LLADID  | A   |  23432 |  NULL | NULL |  | BTREE  |   |    | 
    | lms_loanapp_dtl |   1 | lms_loanapp_dtl_lano |   1 | LANO  | A   |  23432 |  NULL | NULL | YES | BTREE  |   |    | 
    +-----------------+------------+----------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 
+0

おそらく 'lms_collat​​eral_type_description'インデックスと関係があります。このhttp://dba.stackexchange.com/questions/35821/possible-index-on-a-varchar-field-in-mysqlを参照してください。 – bman

答えて

0

タイプがALLであるテーブルはインデックスを使用しません。テーブルのidカラムのインデックスを作成するには、cとdを、bのdescriptionカラムとidカラムの両方にインデックスを1つずつ作成します。

create index ix_id on lms_color(id); 
create index ix_id on lms_fuel_type(id); 
create index ix_description_id on lms_collateral_type(description,id); 
0

カーディナリティが低いため、MySQLはWHEREにALLを使用しています。 MySQLはインデックス付きバイナリ検索を使用するよりも、11項目を超えるテーブルスキャンを行う方が安価だと考えています。

実際の問題は、インデックスのカーディナリティが高い列(lms_loanapp_dtl_lanoおよびcollateral_type_id)を使用してフィルタリングしないことです。

関連する問題