当前位置:编程学习 > C#/ASP.NET >>

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

我数据库里面数据有100万,我查询出来怎么加快他的速度,前提是不是在一个表里面,有不同的表提供内容,4个表。请问大侠怎么实现它的速度加快。 --------------------编程问答-------------------- 视图.... --------------------编程问答-------------------- 建立索引
优化索引
升级硬件~ --------------------编程问答-------------------- 建 视图 --------------------编程问答-------------------- 建立索引 --------------------编程问答-------------------- 建视图吧 --------------------编程问答-------------------- 用索引,建立适当的索引可以极大的提高查询效率 --------------------编程问答-------------------- --------------------编程问答-------------------- 1.从DB方面入手: 优化SQL语句,建立索引,优化索引,升级硬件.
2.从AP方面入手: 使用缓存,优化缓存. --------------------编程问答-------------------- 利用好索引,网上关于这个索引的使用,用好和用不好,效果是不一样的。

适当的将数据分离。。。 --------------------编程问答-------------------- 如果只是查询,提倡部分读取和建立本地缓存 --------------------编程问答-------------------- 建立索引,优化sql语句,只提取部分数据 --------------------编程问答-------------------- 四个表的话,最好不要用关联查,索引肯定是必须的,但不能盲目的建索引。
另外如果有些数据如果能缓存起来最好了。 --------------------编程问答-------------------- 优化索引,建视图,还有控制连接方式,尽量少用左连接 --------------------编程问答-------------------- 最小代价是 优化查询条件 --------------------编程问答-------------------- 优化索引,分离数据,多使用线程技术 --------------------编程问答-------------------- 进来学习的,顺带留个脚印。 --------------------编程问答--------------------
引用 5 楼 gumwzg 的回复:
建视图吧


建视图也可以提高效率吗?


关系是建索引。
优化查询条件。先过滤再关联。

当然硬件升级也是很关键 --------------------编程问答-------------------- 如果只是查询,提倡部分读取和建立本地缓存

数据库端应该建视图(最好是物理化视图),索引,优化一下sql,大表尽量分区 --------------------编程问答-------------------- 肯定的分页 要不datatable都会内存溢出  --------------------编程问答-------------------- 视图
索引
注意SQL关键字性能不同 --------------------编程问答-------------------- 索引
分页存储过程等查询 --------------------编程问答--------------------
引用 2 楼 mayonglong 的回复:
建立索引
优化索引
升级硬件~


有道理。

上面有人提到用“视图” 或许更慢。

--------------------编程问答-------------------- 建立索引    建索引查询虽然快了 但是会影响增删改的速度,就看你的库主要是查还是?
优化索引
升级硬件~ --------------------编程问答-------------------- 我也经常遇到这个问题
话说索引,我都不敢建,怕越建越烂...... --------------------编程问答--------------------
引用 2 楼 mayonglong 的回复:
建立索引
优化索引
升级硬件~

1.支持2樓觀點

2.建立視圖是不可取的,視圖要轉化成相應SQL才執行,這個過程是需要時間的






--------------------编程问答-------------------- 建立索引并且分页传输 --------------------编程问答-------------------- 我觉得分页比较好吧 --------------------编程问答-------------------- 表分区 --------------------编程问答-------------------- 如果你不是DBA,首先考虑缓存结果到内存中,然后再考虑从内存中连接多个对象的数据;
如果你是DBA,那么建立索引,视图,存储过程是必须考虑的;
如果你是业务分析人员,那么首先考虑要不要这样处理数据?换一种方式可以么? --------------------编程问答-------------------- 首先:数据量大不是查询速度慢的原因,
我有几个好的建议:
1.使用预编译的SQL类PreparedStatement 
2.在数据库连接方面使用JNDI,做一个连接池方便连接
3.SQL语句方面当然需要优化.这要看你使用什么DB了.
4.我是用Oracle,建立索引可提高速度哦. --------------------编程问答-------------------- 首先谢谢各位关注我的问题,你们说说的这些我都考虑到了,建索引、视图、临时表、这些我都考虑了,但是真正做了的就是做了一个临时表,我昨天才发现数据库的数据是1000多万,我昨天做了一个临时表第一次出来100万条数据需要10秒,到后面几次就会超时。事务日志空间一下就满了。所以会超时。我现在打算用ajax来处理。利用他的原理,第一次应该慢些,到后面的话应该会看不出他慢。本来我是打算建一个视图,然后再在视图里面建索引。各位给点意见咯。 --------------------编程问答-------------------- 我昨天查了一些资料,建立索引好像只针对一张表起作用咯。不然会使数据显示速度变慢。 --------------------编程问答-------------------- select * into temp_table from A inner join B  on A.id=b.id
创建一个所谓的临时表temp_table,执行一次对事务日志增加不少咯。很容易满,所以这个所谓的临时表。最好不要用。不过写在存储过程中,设置好在某时间自己清理咯。还是可以的。但是在使用完这个东西的时候必须马上删除这个所谓的临时表。drop table temp_table. 感觉这么大的数据在数据库里面做的优化效果不是很明显咯。尤其是很多表。子查询,这样很影响数据库的性能。所以,请各位提示一下在数据库中怎么优化sql,同时在程序里面如果用Ajax是不是可以让浏览者产生错觉,也就是说他能看到数据已经存在,当然作为内行应该知道那数据是一边加载一边显示的。 --------------------编程问答-------------------- 建立视图搞吧,如果数据不是经常更新的话  可以再本地存着 --------------------编程问答-------------------- 数字的索引最快. --------------------编程问答--------------------
优化索引,使用存储过程,对数据进行分页 --------------------编程问答-------------------- 建多级索引吧!

要不干脆直接删除 99 万条数据,哈哈 --------------------编程问答-------------------- 建索引浪费磁盘空间 如果字段内数据重复率很高 就不要建索引 --------------------编程问答--------------------
引用 37 楼 yixianggao 的回复:
建多级索引吧!

要不干脆直接删除 99 万条数据,哈哈

这是想破头也想不到的好方法啊 
--------------------编程问答-------------------- 数据优化,比较复杂的问题,索引,查询方法.. --------------------编程问答-------------------- 建立索引 --------------------编程问答-------------------- 索引,关系
--------------------编程问答-------------------- 对于,你们的回答,不知道是逗我开心还是怎么的,至少我感觉对我没有用咯。那位大侠过来帮帮我咯。不管是从程序的角度来讲还是从SQL优化。先谢谢了。 --------------------编程问答-------------------- 第一次查的用视图保存,以后就会变快了! --------------------编程问答-------------------- 那我不如创建一个临时表呢?然后根据它的特征,在创建一个索引。这样不是更快些!
但是现在我不打算这么做,我打算用程序解决这个问题。AJAX加临时表。我试试咯。DATATABLE 活着用DATASET试试。。最郁闷的是他要生成树形,还要递归,我能快起来吗?郁闷。。。 --------------------编程问答-------------------- 100W数据导入到dataset不到1分钟吧。之前我搞过,对100W数据做了相邻的比较,大概5分钟就搞定了。 --------------------编程问答--------------------
引用 2 楼 mayonglong 的回复:
建立索引
优化索引
升级硬件~

+1 --------------------编程问答--------------------  一百万 还不至于提升硬件吧 优化 索引 应该就可以达到 比较理想的速度了 --------------------编程问答-------------------- 物化视图,索引
感觉100万,数据量不是很大 --------------------编程问答-------------------- 是的,100不算什么啊,我做了一个临时表(是连表查询的,没有建索引和视图什么的。),查询100w只要10秒就搞定了。哈哈。。
可是,现在我数据的数据是1亿,哈哈。。我做临时表老是包我超时了。我很郁闷啊。现在数据已经是1个亿了。大家看看有什么想法咯。 --------------------编程问答-------------------- 谁出来帮我顶顶咯。怎么没人理我了啊。我的问题不是问题咯。大家出来解决一下咯。只看到我结贴率这么低,总是有原因的咯。。真是的。 --------------------编程问答-------------------- 路过,并学习。是不是要想之中高效率的算法呀 --------------------编程问答-------------------- http://www.cnblogs.com/wypmke/articles/1839492.html --------------------编程问答-------------------- 没人能真正回答,因为业务需求不同,做法也不同,没有包治百病的办法. --------------------编程问答-------------------- 同意楼上! --------------------编程问答-------------------- 来学习一下! --------------------编程问答-------------------- 查询多的  用索引。。。。改动多的,目前不知道  没遇到过   --------------------编程问答-------------------- 留个脚印 学习。。。 --------------------编程问答-------------------- 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
--------------------编程问答-------------------- 表分区
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,