索引的益处已经清楚了,介理我们不能只看到这些好处,并认为索引是解决Query优化的圣经,只要发现Query运行不够快就将WHERE子句中的条件全部放在索引中.
确实,索引能够极大地提高数据检索效率,也能够改善排序分组操作的性能,但有不能忽略的一个问题就是索引是完全独立于基础数据之外的一部分数据,假设在Table ta中的Column ca创建了索引idx_ta_ca,那么任何更新Column ca的操作,MySQL在更新表中Column ca的同时,都须要更新Column ca的索引数据,调整因为更新带来键值变化的索引信息,而如果没有对Column ca进行索引,MySQL要作的仅仅是更新表中Column ca的信息,这样,最明显的资源消耗就是增加了更新所带来的IO量和调整索引所致的计算量,此外,Column ca的索引idx_ta_ca须要占用存储空间,而且随着Table ta数据量的增加,idx_ta_ca所占用的空间也会不断增加,所以索引还会带来存储空间资源消耗的增加.