ホームページ  >  記事  >  データベース  >  Explain の key_len を確認して、どのインデックスが使用されているかを確認してください。

Explain の key_len を確認して、どのインデックスが使用されているかを確認してください。

藏色散人
藏色散人転載
2020-03-30 08:51:371986ブラウズ

Explain で key_len を確認して、どのインデックスが使用されているかを確認してください。

テーブルには複数のインデックスがあり、where フィールドの条件には複数のインデックス値があるため、どれを使用する必要がありますか?

推奨: 「 mysql ビデオ」チュートリアル>>

Explain を使用して表示できます。key_len フィールドが表示されます。

たとえば、次の sql

explain select * from ent_calendar_diary where email='xxxx' and diary_id=1784;
 
+----+-------------+--------------------+------------+-------+-------------------------+---------+---------+-------+------+----------+-------+
| id | select_type | table              | partitions | type  | possible_keys           | key     | key_len | ref   | rows | filtered | Extra |
+----+-------------+--------------------+------------+-------+-------------------------+---------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | ent_calendar_diary | NULL       | const | PRIMARY,idx_email_stime | PRIMARY | 4       | const |    1 |   100.00 | NULL  |
+----+-------------+--------------------+------------+-------+-------------------------+---------+---------+-------+------+----------+-------+

possible_keys には 2 つのインデックス フィールドがありますが、key_len は 4 バイトです

Explain の key_len を確認して、どのインデックスが使用されているかを確認してください。

備考、key_len は条件付きで選択されたインデックス列のみを示しますWHERE でのフィルタリングには ORDER BY/GROUP BY

int 型が含まれておらず、null は 4 バイトではないため、上記の SQL では主キー インデックスを使用します

explain select * from ent_calendar_diary where email='xxxx';
+----+-------------+--------------------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+
| id | select_type | table              | partitions | type | possible_keys   | key             | key_len | ref   | rows | filtered | Extra |
+----+-------------+--------------------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | ent_calendar_diary | NULL       | ref  | idx_email_stime | idx_email_stime | 767     | const |  111 |   100.00 | NULL  |
+----+-------------+--------------------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+

これは 767 バイトです。varchar(255) not null 255 * 3 2 は完全に一致するため、使用される電子メールの通常のインデックスです

CREATE TABLE `ent_calendar_diary` (
`diary_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`email` varchar(255) NOT NULL,
`title` varchar(100) NOT NULL,
`summary` varchar(500) NOT NULL DEFAULT '',
`stime` bigint(11) NOT NULL DEFAULT '0',
`ctime` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`diary_id`),
KEY `idx_email_stime` (`email`,`stime`)
) ENGINE=InnoDB AUTO_INCREMENT=1809 DEFAULT CHARSET=utf8

以上がExplain の key_len を確認して、どのインデックスが使用されているかを確認してください。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。