mysql 数据库,表每天会插入30W条数据,该表数据千万级,查询效率很慢,建立索引是否利大于弊?

如题所述

呵呵,我认为可以建立索引,但必须要合理分配IO
为什么:
1:索引是建立在表的一列或多个列上的辅助对象,目的是加快访问表中的数据(加快查询);
2:通常,通过索引查询数据比全表扫描要快. 当ORACLE找出执行查询和Update语句的最佳路径时, ORACLE优化器将使用索引. 除了那些LONG或LONG RAW数据类型, 你可以索引几乎所有的列. 在大型表中使用索引特别有效.
3:虽然使用索引能得到查询效率的提高,但是我们也必须注意到它的代价. 索引需要空间来 存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时, 索引本身也会被修改. 这意味着每条记录的INSERT , DELETE , UPDATE将为此多付出4 , 5 次的磁盘I/O . 因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢.

4:解决方案:
4.1利用分表操作。千万级的数据必须要用垂直分表操作,这样每天插入的数据在不同的表中,索引也就在不同的表的索引中,减少插入带来的效率问题
4.2 索引表空间和数据表空间分开存放。不要把索引和表数据建立在一个磁盘中,利用两个磁盘,分别进行IO操作,也就是索引表空间和数据表空间彻底分开。提高系统IO吞吐量。会有一定的效果,但不如第一个的效果好
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-09-06
如果经常查询肯定要建索引的。索引会占空间,硬盘够大的话。扩大就是了。追问

建立索引会影响插入效率吧?建立索引后每天30W的数据插入量效率大概会降低多少?

第2个回答  2011-09-06
必须建立索引追问

建立索引会影响插入效率吧?建立索引后每天30W的数据插入量效率大概会降低多少?

相似回答