MySQL - INSERT比SELECT慢得多

时间:2016-11-19 08:32:52

标签: php mysql mysqli

说明: 我知道这真的取决于很多因素。但是我对MySQL很担心,因为一些计时行为对我来说似乎不正常,我怀疑我做错了什么。

这是表格:

CREATE TABLE `tmp_set_pumac` (
  `count` int(11) DEFAULT NULL,
  `_pc_avg` float NOT NULL,
  `_pc_min` int(11) NOT NULL,
  `_pc_max` int(11) NOT NULL,
  `tm` int(11) NOT NULL,
  `sx` int(11) NOT NULL,
  `ag` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

ALTER TABLE `tmp_set_pumac`
  ADD PRIMARY KEY (`tm`,`sx`,`ag`);

很简单,使用组合的主键。

我正在对其进行中等复杂度检索查询,例如:

SELECT SUM(`count`) AS `count`, AVG(`_pc_avg`) AS `_pc_avg`, MIN(`_pc_min`) AS `_pc_min`, MAX(`_pc_max`) AS `_pc_max`, (floor((`tm`-0)/200)*200+0) AS `tm`, `sx`, `ag` 
FROM tmp_set_pumac 
WHERE (`_pc_avg` BETWEEN 10 AND 14) AND (`_pc_min` BETWEEN 10 AND 14) AND (`_pc_max` BETWEEN 10 AND 14) AND (`sx` BETWEEN 0 AND 2) 
GROUP BY floor((`tm`-0)/200)*200+0, `sx`, `ag`

以及中等复杂度的插入查询,例如:

INSERT INTO tmp_set_pumac (`count`, `tm`, `sx`, `ag`, `_pc_avg`, `_pc_min`, `_pc_max`) VALUES (1, 12205, 2, 6, 10, 10, 10) 
ON DUPLICATE KEY UPDATE `count`=`count`+1, `_pc_avg`=((`_pc_avg`*`count`)+ 10) / (`count`+1), `_pc_min`=IF(`_pc_min`<10,`_pc_min`,10), `_pc_max`=IF(`_pc_max`>10,`_pc_max`,10)

问题: 我用Xdebug分析我的PHP - 并与MySQLi连接。检索查询(第二个SQL代码)需要4毫秒才能执行(它会在服务器上完成所有agregarion时检索较少的行数)。 但是Inser Query(第三个SQL代码)需要花费90ms才能执行。现在,好吧,UPDATE代码执行起来可能看起来很复杂,但只会在IF新行中执行一次,与现有行冲突(即将与索引一起找到)。那么这种执行差异怎么可能呢?

在你问之前。我试过用&amp;主键字段上没有索引。

0 个答案:

没有答案