专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »数据库 » mysql数据库优化:MySQL数据库索引查询优化的分享 »正文

mysql数据库优化:MySQL数据库索引查询优化的分享

来源: 发布时间:星期六, 2008年12月20日 浏览:2次 评论:0
="t18">问题描述:
我们要访问表是个非常大 4千万条记录id是主键program_id上建了索引
执行条SQL:

select * from program_access_log where program_id between 1 and 4000
这条SQL非常慢
我们原以为处理记录太多原因所以加了id限制次只读 5十万条记录

select * from program_access_log where id between 1 and 500000 and program_id between 1 and 4000
但是这条SQL仍然很慢速度比上面条几乎没有提升
Mysql处理50万条记录条件字段还建了索引这条语句应该是瞬间完成

问题分析:
这张表大约容量30G数据库服务器内存16G无法次载入就是这个造成了问题
这条SQL有两个条件ID到 5十万和Program_id到 4千program_id范围小得多mysql选择它做为主要索引
先通过索引文件找出了所有program_id在1到4000范围里所有id这个过程非常快
接下来要通过这些id找出表里记录由于这些id是离散所以mysql对这个表访问不是顺序读取
而这个表又非常大无法次装入内存所以每访问条记录mysql都要重新在磁盘上定位并把附近记录都载入内存大量IO操作导致了速度下降

问题解决方案:
1. 以program_id为条件对表进行分区
2. 分表处理每张表大小不超过内存大小
然而服务器用是mysql5.0不支持分区而且这个表是公共表无法在不影响其它项目条件下修改表结构
所以我们采取了第 3种办法:

select * from program_access_log where id between 1 and 500000 and program_id between 1 and 15000000
现在program_id范围远大于id范围id被当做主要索引进行查找由于id是主键所以查找是连续50万条记录速度和访问个50万条记录表基本

整理总结:
这是个在千万笔记录表中由于使用了索引导致了数据查找变慢问题典型性和大家交流下!

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: