是否以主键顺序插入行更快?

时间:2012-04-19 00:21:04

标签: mysql

我有一张这样的表:

create table stream_last
(
        symbol_id       integer,
        high            decimal(8,2),
        low             decimal(8,2),
        last            decimal(8,2),
        volume          integer,
        last_updated    datetime,
        INDEX USING BTREE(symbol_id)
) ENGINE=MEMORY;

我需要每5秒执行大约4,000次插入(由C程序读取流并在symbol_id上聚合)。但是,我可以先对数据进行排序,然后按symbol_id ASCENDING按顺序插入。会使这个批量插入更快吗?

第二个问题是,BTREE是索引的最佳选择吗?从文档中,我可以使用HASH,但不确定哪个最好......

2 个答案:

答案 0 :(得分:4)

不要认为您可能会对您提出的优化产生任何重大影响,但建议在此列出

http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html

当然可以帮助您更好地了解您的需求。

这句话可能有意义

  

表的大小减慢了log N插入索引的速度,   假设B树索引。

     

您可以使用以下方法加速插入:

     

如果您同时从同一客户端插入多行,   使用带有多个VALUES列表的INSERT语句来插入多个   一次排。这速度要快得多(有些速度要快很多倍)   case)比使用单独的单行INSERT语句。如果你是   将数据添加到非空表,您可以调整   bulk_insert_buffer_size变量使数据插入更快。   请参见第5.1.3节“服务器系统变量”。

答案 1 :(得分:0)

这些文档表明按主键顺序插入可以提高性能:

<块引用>

执行批量插入时,以 PRIMARY KEY 顺序插入行会更快。 InnoDB 表使用聚集索引,这使得按 PRIMARY KEY 的顺序使用数据相对较快。以 PRIMARY KEY 顺序执行批量插入对于不完全适合缓冲池的表尤为重要。

来源:https://dev.mysql.com/doc/refman/5.7/en/optimizing-innodb-bulk-data-loading.html

最好将此优化与@Igor 的回答中引用的批量插入语句结合起来。