100万数据查询,加快速度。

wuchao241241 2010-07-26 01:37:22
我数据库里面数据有100万,我查询出来怎么加快他的速度,前提是不是在一个表里面,有不同的表提供内容,4个表。请问大侠怎么实现它的速度加快。
...全文
644 60 打赏 收藏 转发到动态 举报
写回复
用AI写文章
60 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqaoshi888 2010-12-07
  • 打赏
  • 举报
回复
100万条数据的话尽量使用存储过程,并且Sql语句和索引都要合理优化。
举个例子:
有一个员工表(EmpID,Name),和保险表(ID,Employee,StartDate)。我们要查询在2006年以后(但不包含2006内的)交纳保险的员工信息,一般人都会写
select * from Tab_Employee,Tab_Insurance where EmpID = Employee and StartDate > '2006/1/1'

这一个语句看似简单,但是需要优化的地方很多:
1、SQL 语句 要大写,这样系统能够更快的处理语句
2、尽量少使用 * ,如果要查询所有的字段,如果使用* 的话,系统会先检索 Tab_Employee里面会有多少字段,然后再去查询,另外,涉及到多个表查询的时候采用 [表名].[字段名]的方式,及时几个表没有冲突字段,但是系统在执行时候仍需要去处理。
3、我们要查询的为2006以后但不包含2006,这样的话,可以写成 StartDate >= '2007/1/1',为什么要这样写呢?原因是:前一句系统会以2006为标准进行对比查询,而后者是以2007为标准进行查询的。可以想象假如你有100万条数据,其中有80万是小于2007的,系统查询会多浪费多少时间。
4、合理使用索引。如果是几个表的管理,尽量使用索引,这样系统在查询的时候只需要查询索引就可以了,而不是查询全表。这样能够节省非常多的时间。
5、涉及到子查询的情况,一定要对子查询进行优化,把最少数据结果返回给上级查询。平时尽量不要使用子查询,因为子查询基本可以使用表的关联查询代替,因为表之间的关联查询一般要比子查询的效果要高。


这是个人的一点经验之谈,之前给公司的ERP服务器做优化(用友U8),帐套数据10G了,数据查询非常慢,自己把用友里面的一些涉及到物料查询的子查询修改后,执行时间仅有以前的40%。

在论坛内给你找了个帖子,希望楼主好好学习一下。
http://topic.csdn.net/u/20080808/14/dfc973e7-fcf2-4526-9de1-fa5efc148f5c.html
cjh200102 2010-12-07
  • 打赏
  • 举报
回复
表分区
南瓜饼 2010-12-06
  • 打赏
  • 举报
回复
留个脚印 学习。。。
yufenghua 2010-12-06
  • 打赏
  • 举报
回复
查询多的 用索引。。。。改动多的,目前不知道 没遇到过
salecn 2010-12-06
  • 打赏
  • 举报
回复
来学习一下!
bios8086 2010-12-06
  • 打赏
  • 举报
回复
同意楼上!
jincaomao 2010-12-06
  • 打赏
  • 举报
回复
没人能真正回答,因为业务需求不同,做法也不同,没有包治百病的办法.
  • 打赏
  • 举报
回复
http://www.cnblogs.com/wypmke/articles/1839492.html
zhenshangzhengren 2010-12-06
  • 打赏
  • 举报
回复
路过,并学习。是不是要想之中高效率的算法呀
wuchao241241 2010-07-30
  • 打赏
  • 举报
回复
谁出来帮我顶顶咯。怎么没人理我了啊。我的问题不是问题咯。大家出来解决一下咯。只看到我结贴率这么低,总是有原因的咯。。真是的。
willy2358 2010-07-28
  • 打赏
  • 举报
回复
物化视图,索引
感觉100万,数据量不是很大
lyvscf 2010-07-28
  • 打赏
  • 举报
回复
一百万 还不至于提升硬件吧 优化 索引 应该就可以达到 比较理想的速度了
t20100504t 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mayonglong 的回复:]
建立索引
优化索引
升级硬件~
[/Quote]
+1
chazikai24 2010-07-28
  • 打赏
  • 举报
回复
100W数据导入到dataset不到1分钟吧。之前我搞过,对100W数据做了相邻的比较,大概5分钟就搞定了。
wuchao241241 2010-07-28
  • 打赏
  • 举报
回复
那我不如创建一个临时表呢?然后根据它的特征,在创建一个索引。这样不是更快些!
但是现在我不打算这么做,我打算用程序解决这个问题。AJAX加临时表。我试试咯。DATATABLE 活着用DATASET试试。。最郁闷的是他要生成树形,还要递归,我能快起来吗?郁闷。。。
xiaowei5780651 2010-07-28
  • 打赏
  • 举报
回复
第一次查的用视图保存,以后就会变快了!
wuchao241241 2010-07-28
  • 打赏
  • 举报
回复
是的,100不算什么啊,我做了一个临时表(是连表查询的,没有建索引和视图什么的。),查询100w只要10秒就搞定了。哈哈。。
可是,现在我数据的数据是1亿,哈哈。。我做临时表老是包我超时了。我很郁闷啊。现在数据已经是1个亿了。大家看看有什么想法咯。
风平心境 2010-07-27
  • 打赏
  • 举报
回复
数字的索引最快.
一切为了你 2010-07-27
  • 打赏
  • 举报
回复
建立视图搞吧,如果数据不是经常更新的话 可以再本地存着
wuchao241241 2010-07-27
  • 打赏
  • 举报
回复
select * into temp_table from A inner join B on A.id=b.id
创建一个所谓的临时表temp_table,执行一次对事务日志增加不少咯。很容易满,所以这个所谓的临时表。最好不要用。不过写在存储过程中,设置好在某时间自己清理咯。还是可以的。但是在使用完这个东西的时候必须马上删除这个所谓的临时表。drop table temp_table. 感觉这么大的数据在数据库里面做的优化效果不是很明显咯。尤其是很多表。子查询,这样很影响数据库的性能。所以,请各位提示一下在数据库中怎么优化sql,同时在程序里面如果用Ajax是不是可以让浏览者产生错觉,也就是说他能看到数据已经存在,当然作为内行应该知道那数据是一边加载一边显示的。
加载更多回复(39)

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧