mysql 数据库,表每天会插入30W条数据,该表数据千万级,查询效率很慢,建立索引是否利大于弊?
3个回答
展开全部
呵呵,我认为可以建立索引,但必须要合理分配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:索引是建立在表的一列或多个列上的辅助对象,目的是加快访问表中的数据(加快查询);
2:通常,通过索引查询数据比全表扫描要快. 当ORACLE找出执行查询和Update语句的最佳路径时, ORACLE优化器将使用索引. 除了那些LONG或LONG RAW数据类型, 你可以索引几乎所有的列. 在大型表中使用索引特别有效.
3:虽然使用索引能得到查询效率的提高,但是我们也必须注意到它的代价. 索引需要空间来 存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时, 索引本身也会被修改. 这意味着每条记录的INSERT , DELETE , UPDATE将为此多付出4 , 5 次的磁盘I/O . 因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢.
4:解决方案:
4.1利用分表操作。千万级的数据必须要用垂直分表操作,这样每天插入的数据在不同的表中,索引也就在不同的表的索引中,减少插入带来的效率问题
4.2 索引表空间和数据表空间分开存放。不要把索引和表数据建立在一个磁盘中,利用两个磁盘,分别进行IO操作,也就是索引表空间和数据表空间彻底分开。提高系统IO吞吐量。会有一定的效果,但不如第一个的效果好
展开全部
如果经常查询肯定要建索引的。索引会占空间,硬盘够大的话。扩大就是了。
追问
建立索引会影响插入效率吧?建立索引后每天30W的数据插入量效率大概会降低多少?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
必须建立索引
追问
建立索引会影响插入效率吧?建立索引后每天30W的数据插入量效率大概会降低多少?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询