开个贴子,讨论下Mysql文章表设计、优化问题

冰封情 发布于 2010/06/21 19:58
阅读 2K+
收藏 8

一般文章站现在很容易文章数上到10万(采集嘛),所以很多CMS在到了这个级别的时候就显得有的慢!生成静态文件的速度大打折扣。10万还是一个小级别的,50万、100万呢?据说msyql每个人都在玩,但是不是每个人都可以玩的很顺利哦,1万之内,你程序随便爱怎么写就怎么写,表爱怎么设计就怎么设计。回到正题吧!谈谈大家设计的思路!先说说的我的思路吧!

表字段:

 

字段不算太多,比较经典的,一般cms都有的设计模型,大部分用的int,现在不考虑设计类型的优化。从表中很大一部分是要做检索的,所以都做index处理。

我现在这张表有大概2.5G的数据,记录也就14万左右吧!

1、 select * from tb_article order by article_id desc limit 10,

效率相当的不错,0.0*秒就出来了

2、 select * from tb_article order by article_id desc limit 9000,10,

对不起,mysql基本上不要想用了,27s

我也看了很多资料!找不到原因!试了:select article_id from tb_article order by article_id desc limit 9000,10 不行,估计mysql库到了2.G多就比较麻烦。

所以办法,就是对该表进行拆分,常用检索字段做一个表,昨晚试了下,这个表10M都不到,查询结果还是很理想的!

以上只是个人想到的,如果遇到100W,或者1000W,怎么解决?

谈谈自己看法!

加载中
0
红薯
红薯

10 万条数据有 2.5 G 的数据,看来每篇文章都挺长啊。

能确定是查询的时候慢,还是读取结果时慢吗?

Navicat 工具可以分析。

l
liweierhuo
min
0
冰封情
冰封情

就是文章大,是这个limit 的第一个参数过于庞大,导致读取慢了,不知道这个limit函数是不是一条一条过过的,我估计是这个样子,如果limit 10,10是非常快的,今天干脆把代码都重写了!

0
zhuzhangsuo
zhuzhangsuo

拆表吧,把公用字段拆出来,是可以供多种实体使用的,也比较容易实现继承

0
帝江
帝江

是limit第一个参数过大.虽然有些数据不需要.mysql还是会一条一条"数"的.数到第9000条.开始边"数"边"收集".

可以用where代替.limit一般用于分页.肯定知道上一页的"最大值".那下一页肯定从比最大值还大的那个值开始的.比如上一页ID是8000.where可以写ID > 8000 limit 10.这样直接定位到目标数据.节省了"数"的时间了.

("数"类似游标吧.不知道该怎么表达更清楚一点)

0
冰封情
冰封情

引用来自“帝江”的评论

是limit第一个参数过大.虽然有些数据不需要.mysql还是会一条一条"数"的.数到第9000条.开始边"数"边"收集".

可以用where代替.limit一般用于分页.肯定知道上一页的"最大值".那下一页肯定从比最大值还大的那个值开始的.比如上一页ID是8000.where可以写ID > 8000 limit 10.这样直接定位到目标数据.节省了"数"的时间了.

("数"类似游标吧.不知道该怎么表达更清楚一点)

这个ID如果不是排序或者中间有删除过,那你这个方法就有点问题了,分页就不好使了

0
帝江
帝江

引用来自“帝江”的评论

是limit第一个参数过大.虽然有些数据不需要.mysql还是会一条一条"数"的.数到第9000条.开始边"数"边"收集".

可以用where代替.limit一般用于分页.肯定知道上一页的"最大值".那下一页肯定从比最大值还大的那个值开始的.比如上一页ID是8000.where可以写ID > 8000 limit 10.这样直接定位到目标数据.节省了"数"的时间了.

("数"类似游标吧.不知道该怎么表达更清楚一点)

引用来自“冰封情”的评论

这个ID如果不是排序或者中间有删除过,那你这个方法就有点问题了,分页就不好使了

1.中间有删除过没问题.field > xxx.可以是xxx+1,也可以是xxx+2.都可以的.

2.你说的不是排序的话.数据库会默认按照id排序.不过如果是其他排序的话.就要注意了.比如按time_create排序的话.那就要写where time_create > xx了.或者小于.不过其他字段如果有重复的话.就不准了.这时候是真不准了...

0
javaxiaoz
javaxiaoz

1.拆表

2.不用limit,用id 使用between查询是最快的

返回顶部
顶部