mysql数据表内的记录达到两百万时候读取一条记录需要一千秒以上???

fancanjie 发布于 2013/12/03 00:32
阅读 5K+
收藏 4
mysql日志:获取记录(1124) SELECT * FROM XXX  Where ID='36462' limit 1

ID是数据表的主键.


前几天把网站数据达到199万了,一张数据表大小达到8G左右,我把以前的PHP sql查询缓存清空后,发现执行一条查询竟然要一千多秒,最快的也要八百秒以上,但执行插入操作又挺快的,请问大家这是怎么回事,我使用的是myisam引擎。其它的数据表都可以正常访问,就这个表大了访问超级慢.
另外我考虑进行分区或是分表,哪种方案更好呢?

磁盘读写速度没有问题,下面是我刚刚测试的读写速度:
[root@XXXXXXXX ~]# df -lh
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       20G  2.9G   17G  15% /
tmpfs           1.9G  3.8M  1.9G   1% /dev/shm
/dev/xvdb1      197G  104G   84G  56% /www
[root@XXXXXXXX ~]# dd if=/dev/zero bs=1k count=1000000 of=1Gb.file
记录了1000000+0 的读入
记录了1000000+0 的写出
1024000000字节(1.0 GB)已复制,9.29581 秒,110 MB/秒
[root@XXXXXXXX ~]# df -lh
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       20G  3.8G   16G  20% /
tmpfs           1.9G  3.9M  1.9G   1% /dev/shm
/dev/xvdb1      197G  104G   84G  56% /www
[root@XXXXXXXX ~]# dd if=1Gb.file bs=64k |dd of=/dev/null
记录了15625+0 的读入
记录了15625+0 的写出
1024000000字节(1.0 GB)已复制记录了2000000+0 的读入
记录了2000000+0 的写出
1024000000字节(1.0 GB)已复制,2.86662 秒,357 MB/秒
,2.86673 秒,357 MB/秒


以下是问题补充:

@fancanjie:问题已经解决了,谢谢各位的帮助与好意。 我把这个数据表按每20万分一个区,然后再对分类ID与用户ID(主要是这两项与ID一起参与了条件判断)创建索引,另外把mysql isam引擎的4G文件限制破解了就可以了。现在执行查询都再0.02秒左右. (2013/12/04 20:31)
加载中
0
iSea
iSea
把 * 换成 明确字段,把limit 1 去掉看看结果怎么样?
iSea
iSea
那个1124是毫秒还是秒?
0
fancanjie
fancanjie
我在mysql里面测试了select ID from XXX where ID=36462依然是一千多秒;
0
fancanjie
fancanjie
在同一个数据库的其它数据表都是正常的,这个数据表就是数据到199万时候变慢的.我查mysql队列,发现队列里面没其它查询竟然也是这么慢。
0
fancanjie
fancanjie
我刚开始以为是mysql有这个问题后来更换为mariaDB,这个问题还是一样未能解决.
0
fancanjie
fancanjie
打算明天来进行分表或是分区了。
0
寒川
寒川
不会吧!不至于。
0
ericsoul
ericsoul
不知道,mysql有没有索引字段类型判断。id是number型,所以带引号,走不到索引?不然不可能的,200w,很少的数据了。
0
爱喝貓的咖啡
爱喝貓的咖啡

对当今流行的数据库来说,一个表存个上千万的记录没啥大问题。

估计是你的建表或查询方式有问题。

0
13123123
13123123
重装mysql 扩展mysql内存试试
0
yak
yak

200w数据不建索引,用like查询 返回1s以内


返回顶部
顶部