我要在Mysql的表中插入大量数据,我需要创建一个索引来快速访问数据,但是,我想知道这两种情况之间是否存在差异(性能) :
提前谢谢!
答案 0 :(得分:1)
对于InnoDB存储引擎,对于集群索引,在插入数据之前在表上指定集群索引(即PRIMARY KEY
)会更快。
这是因为,如果未在表上定义集群索引(PRIMARY KEY),则InnoDB将为集群索引使用一个隐藏的6字节自动递增计数器。如果以后指定了PRIMARY KEY,则将需要重建整个表。
对于具有InnoDB的二级索引(即非群集索引),通常在未定义二级索引的情况下插入数据,然后在数据加载后构建二级索引会更快。
关注
就装载到表(特别是被截断/清空,然后重新装载的表)的速度而言,删除和重新创建索引是一种加速处理的公知技术,不仅限于MySQL ,但使用其他RDBMS,例如Oracle。)
不能保证处理会更快;与大多数事物数据库一样,我们需要进行测试以确定哪个更快。
对于包含数百万行的表,我们要添加几百行,那么删除和重建索引的速度可能会慢很多,因为要为所有现有行。在插入行时,进行索引维护会更快。
就加快加载速度而言,“删除并重新创建索引”技术不会给我们带来其他变化带来的显着改善。例如,使用LOAD DATA
代替INSERT
语句,使用多行INSERT
语句与一系列单例{{ 1}}语句。