主题:[讨论]如果数据库记录数很多,该怎么解决效率问题?
shayi
[专家分:80] 发布于 2006-09-19 09:53:00
如果俺建一个论坛,比如俺把帖子放在一个表“title”里。如果论坛用户很多,那么这个表的记录数会很多。假设有1000个用户,每个用户发帖1000,就有100万条记录。这样检索起来会很慢。俺考虑如果发现表内记录数超过20万条就增加一个新表,比如“title_1”,依此类推。问题是,如果有多个“title_1”、“title_2”“title_3”……,那么在显示数据的时候俺岂不是要从多个表中select数据出来?这样速度不是会很慢吗?
还有就是,用什么语句来判断新表“title_1”、“title_2”“title_3”……的存在?
另外,是不是有更好的解决方法?
回复列表 (共4个回复)
沙发
gongchengh [专家分:390] 发布于 2006-09-21 20:36:00
一般来说这个并不是问题
一个论坛可能有这么多人,但是不是每个人都有这么多帖子所以记录并不会这么多.
其次是100万记录对SQL基本是没什么压力的,只要不联合查询.
并且你select 的是10/20条数据,这个作一个索引应该好一点.
第三你可以作一个主表记录帖子的主题信息,回贴信息可以用另一个从表记录,这样至少打开帖子列表不会很慢.
板凳
shayi [专家分:80] 发布于 2006-09-22 10:23:00
谢谢楼上的解答。
你说100万条记录对SQL Server不是问题,那么对Access数据库呢?
或者,如果是1000万条记录呢?
你说把主帖和回复分两个表,这个是正解。
可是俺的问题是,假设俺要每20万条记录建一个新表,该怎么解决这个问题?如果判断已有的表?
还有就是:如果帖子存在于多个表中,那么显示帖子的时候岂不是要到多个表中去查找,那样效率岂不是很慢?应该怎么解决?
3 楼
wdkshp [专家分:5490] 发布于 2006-10-11 16:23:00
dim mydb as database
set mydb=dbengine.workspace(0).opendatabase(要打开的数据库名称,true,false,";pwd=密码")
判断已有的表
for each tdtemp in mydb.TableDefs
if tdtemp.name="123" then
msgbox "123表已经存在!"
exit for
end if
next
建立一个新表
mydb.CreateTableDef(name)
4 楼
wdkshp [专家分:5490] 发布于 2006-10-11 16:28:00
如果帖子存在于多个表中,那么显示帖子的时候岂不是要到多个表中去查找,那样效率岂不是很慢?应该怎么解决?
每次显示一个表的内容或者部分内容
因为记录多,用户不可能一次全部读完
等到翻页时再查询第二个表
我来回复