単一キーインデックスは1つのsqlが複数歩きますか?
4426 ワード
sql , 。
mysql> \s
--------------
mysql Ver 14.14 Distrib 5.1.48, for Win32 (ia32)
Connection id: 13
Current database: pk_test
Current user: root@localhost
SSL: Not in use
Using delimiter: ;
Server version: 5.1.48-community MySQL Community Server (GPL)
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: latin1
Db characterset: utf8
Client characterset: latin1
Conn. characterset: latin1
TCP port: 3306
Uptime: 43 min 42 sec
Threads: 2 Questions: 2604 Slow queries: 0 Opens: 23 Flush tables: 1 Open tables: 2 Queries per second avg: 0.993
--------------
========================================
。
CREATE TABLE `t_carmodelparamvalue2` (
`ModelParamValueID` int(11) NOT NULL AUTO_INCREMENT,
`ParameterID` int(11) NOT NULL,
`ParamValueID` int(11) DEFAULT NULL,
`ModelID` int(11) NOT NULL,
`ValueText` varchar(512) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`SeriesID` int(11) DEFAULT NULL,
PRIMARY KEY (`ModelParamValueID`),
KEY `ModelID` (`ModelID`),
KEY `SeriesID` (`SeriesID`),
KEY `ak_paramvalue_parameterid` (`ParameterID`)
) ENGINE=InnoDB AUTO_INCREMENT=1254098 DEFAULT CHARSET=gb2312;
mysql> select count(*) from `t_carmodelparamvalue2`;
+----------+
| count(*) |
+----------+
| 500 |
+----------+
1 row in set (0.00 sec)
mysql> explain select * from T_CarModelParamValue2 where modelid = 276666 and ParameterID = 180;
+----+-------------+-----------------------+------+-----------------------------------+---------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------------------+------+-----------------------------------+---------+---------+-------+------+-------------+
| 1 | SIMPLE | T_CarModelParamValue2 | ref | ModelID,ak_paramvalue_parameterid | ModelID | 4 | const | 1 | Using where |
+----+-------------+-----------------------+------+-----------------------------------+---------+---------+-------+------+-------------+
1 row in set (0.00 sec)
===================================================
, ?
CREATE TABLE `t_carmodelparamvalue` (
`ModelParamValueID` int(11) NOT NULL AUTO_INCREMENT,
`ParameterID` int(11) NOT NULL,
`ParamValueID` int(11) DEFAULT NULL,
`ModelID` int(11) NOT NULL,
`ValueText` varchar(512) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`SeriesID` int(11) DEFAULT NULL,
PRIMARY KEY (`ModelParamValueID`),
KEY `ModelID` (`ModelID`),
KEY `SeriesID` (`SeriesID`),
KEY `ak_paramvalue_parameterid` (`ParameterID`)
) ENGINE=InnoDB AUTO_INCREMENT=1253591 DEFAULT CHARSET=gb2312;
mysql> select count(*) from `t_carmodelparamvalue`;
+----------+
| count(*) |
+----------+
| 1189500 |
+----------+
1 row in set (2.73 sec)
mysql> explain select * from T_CarModelParamValue where modelid = 276666 and ParameterID = 180;
+----+-------------+----------------------+-------------+-----------------------------------+-----------------------------------+---------+------+----
--+-----------------------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------------------+-------------+-----------------------------------+-----------------------------------+---------+------+------+-----------------------------------------------------------------+
| 1 | SIMPLE | T_CarModelParamValue | index_merge | ModelID,ak_paramvalue_parameterid | ModelID,ak_paramvalue_parameterid | 4,4 | NULL |1 | Using intersect(ModelID,ak_paramvalue_parameterid); Using where |
+----+-------------+----------------------+-------------+-----------------------------------+-----------------------------------+---------+------+------+-----------------------------------------------------------------+
1 row in set (0.00 sec)
。
表現を見ると、データ量が百万に達すると複数歩くという結論に達した.
実は、1つのテーブルがinsert、select、変換エンジンなどの操作を大量にした場合、この問題が発生します.
その百万級の時計を空にしてから、やはり複数のエンジンを先に行きます.