一张表.里面有N个字段,m个索引.
在mysql中,向这个表insert 数据的时候.
是否需要先扫描索引呢?
我的意思是,既然里面有索引,那么数据就是有序的吧。
那么就是说,我insert的数据的时候
就要扫描索引 让后排序,放到X位置吧.
以上,是我理论想的
=======================================
但是。。
我做了个实验,向空表进行insert ,向10W条数据表里面插入insert 。向100W条数据表里面insert. 
向300W条表里面insert 语句.. 以上都是相同表结构,相同索引其insert时间几乎一样。
==============================================
 insert 不需要选择放到X个位置吗?

解决方案 »

  1.   

    所有的CUD操作,索引都是后更新的。因为索引里要记录数据的目标“地址”,这个地址必须是数据更新完以后才能得到的。
    看看相关数据库源码就知道了。
      

  2.   

    INSERT 如果有主键/唯一索引,则会先扫描索引。而对其它的普通索引,则是在数据插入完成后,再维护更新索引。索引是BTREE,时间复杂度可以近似的认为是Log2(N) ,所以不会有什么影响。