MySQL INSERT速记与速记性能

时间:2015-06-03 21:39:13

标签: mysql database performance query-performance insert-into

有什么区别:

INSERT INTO `table_name` SET `col1` = 'val1', `col2` = 'val2', `col3` = 'val3'

INSERT INTO `table_name` (`col1`,`col2`,`col3`) VALUES('val1','val2','val3')

使用速记是否有性能优势?我自己喜欢手写,但从逻辑上讲,出于性能原因,我每次都应该使用速记吗?基准测试告诉我,上面的选项#2稍快一点,但是为什么呢?

public function benchmarkInsert() {

    $int_value = 1;
    $varchar_value = 'Stuff';
    $serialized_value = json_encode(array('Serialized Stuff'));

    $this->db->query("TRUNCATE TABLE `query_benchmark`");

    $start = microtime(true);       

    for ( $i = 0; $i < 10000; $i++ ) {          
        $this->db->query("INSERT INTO `query_benchmark` (`col1`,`col2`,`col3`) VALUES($int_value,'$varchar_value','$serialized_value')");
    }       

    $elapsed = microtime(true) - $start;

    echo 'SHORTHAND: '.$elapsed.'<br/>';

    $this->db->query("TRUNCATE TABLE `query_benchmark`");       

    $start = microtime(true);       

    for ( $i = 0; $i < 10000; $i++ ) {

        $this->db->query("INSERT INTO `query_benchmark` SET `col1` = $int_value, `col2` = '$varchar_value', `col3` = '$serialized_value'");

    }       

    $elapsed = microtime(true) - $start;

    echo 'LONGHAND: '.$elapsed.'<br/>';

}

2 个答案:

答案 0 :(得分:2)

这两个查询应该没有区别。它们应该由数据库转换为相同的执行计划。

3%的差异可能是由无关因素(缓存,数据库负载等)引起的

您可以通过使用EXPLAIN

查看执行计划来验证这一点

https://dev.mysql.com/doc/refman/5.6/en/explain.html

答案 1 :(得分:1)

差异是2.#1比#2长2个字符。

我在记事本中测试了它。

随着时间的推移,我们正在谈论腕管综合征

也让你的左小指与`

打破