首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

100万条记录,多人、多次查询,如何做查询比较快

2012-08-02 
100万条记录,多人、多次查询,怎么做查询比较快?有一个网站,记录暂时100万条,做整站查询的额时候暂时只查询

100万条记录,多人、多次查询,怎么做查询比较快?
有一个网站,记录暂时100万条,做整站查询的额时候
暂时只查询新闻的标题。

ID,TITLE

如果单个人查询,可以用网上很多的SQL 分页代码查询,如果同时多个人查询,查询的关键词不同。
速度会大大降低,请问有什么方法能够解决这个问题?
暂时先不同多台服务器方案,费用太大

可以通过算法、多表、或者其他的变通方法都行,谢谢大家。


[解决办法]
可考虑储存过程,第一次访问时候将编译好的,放在高速缓冲区中,以后访问在高速缓冲区
调用存储过程,减轻服务器的资源压力。

另外减轻客户端与服务器的流量。

[解决办法]
最短回复 索引
[解决办法]
给标题加索引列,然后做全文索引
[解决办法]
优化SQL语句
[解决办法]
1、看sql执行效率问题了。优化sql语句。
2、如果不是实时查询的,也可以把查询的结果放在一个临时表中,然后从临时表中访问大大提高的
执行的效率,在设置服务器访问最小的时候作业中定时执行了。
[解决办法]
索引 有必要的话要用位图索引
[解决办法]
建立索引
[解决办法]
百万级数据根据日期排序做分页喽?建个索引视图好了,里面写上ROW_NUMBER()排序,秒级查询。
[解决办法]
或者用CTE,用NOLOCK取排序列出来排序,也很快
[解决办法]

SQL code
--建立测试环境IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TBGOCREATE TABLE TB(ID UNIQUEIDENTIFIER PRIMARY KEY,TITLE VARCHAR(100),CONTENT VARCHAR(MAX),UPDATE_DATE DATETIME)GOINSERT INTO TBSELECT TOP 1000000 NEWID(),NEWID(),NEWID(),GETDATE()FROM MASTER..SPT_VALUES T1CROSS JOIN MASTER..SPT_VALUES T2GOCREATE INDEX INX_TB_UPDATE_DATE ON TB(UPDATE_DATE)GOSELECT COUNT(1) FROM TBGO--1000000--CTE分页查询,取第1W页开始的20行SET NOCOUNT ONSET STATISTICS IO ONSET STATISTICS TIME ONGO;WITH MU AS (SELECT ID,ROW_NUMBER() OVER(ORDER BY UPDATE_DATE DESC) AS ROW_NUMFROM DBO.TB WITH(NOLOCK))SELECT ID FROM MU  WHERE ROW_NUM BETWEEN 10001 AND 10020GO/*SQL Server 分析和编译时间:    CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。表 'TB'。扫描计数 1,逻辑读取 45 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。*/SET STATISTICS IO OFFSET STATISTICS TIME OFFSET NOCOUNT OFF
[解决办法]
首先你要说一下你的带宽
自己的服务器?
独享?还是共享?

多人多次,主要开始看你的并发能力

[解决办法]
SQL code
DECLARE @BEGIN INT,@END INTSELECT @BEGIN=900080,@END=1000000--SELECT TOP (@END-@BEGIN) ID FROM (--SELECT TOP (@END) UPDATE_DATE,ID FROM TB ORDER BY UPDATE_DATE DESC--) T ORDER BY UPDATE_DATE ASC;WITH MU AS (SELECT ID,ROW_NUMBER() OVER(ORDER BY UPDATE_DATE DESC) AS ROW_NUMFROM DBO.TB WITH(NOLOCK))SELECT ID FROM MU  WHERE ROW_NUM BETWEEN @BEGIN AND @ENDGO/* SQL Server 执行时间:   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。表 'TB'。扫描计数 1,逻辑读取 3737 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。*/
[解决办法]

[解决办法]
能不能用数据库分区表来解决这个问题呀。
[解决办法]
100万并不多,这点数据量不建议分区
仔细设计好是正道,从CPU、HDD、数据库结构、SQL指令
[解决办法]
可以用程序来解决部分问题,例如:缓存
因为访问的大部分都是默认查询,很容易关键字重复,把数据放缓存里面就不消耗数据库资源了
[解决办法]
索引和存储过程在加上缓存.
[解决办法]


探讨
索引和存储过程在加上缓存.

[解决办法]
title做全文索引
[解决办法]
1、对表进行分区。
2、对数进行分类,尽可能不去遍历所有的表的数据记录
[解决办法]
学习,学习
[解决办法]
qiao瞧瞧!!
[解决办法]
我说一下我们公司做搜索的实现方式,我们同事是通过搜索引擎来实现的,就是用Lucene先建好索引,然后搜索时直接去读索引
[解决办法]
用校验值索引,避免全文索引不准情况.

alter table tbname add hash_title AS checksum(title)
create index title_index1 on tbname (hash_title)

select id,title from tbname 
where checksum(@title)=hash_title
and title=@title

另:位图索引多用于olap.

[解决办法]
学习了

热点排行