请问,sqlserver把表全部装在到内存怎么装载。装载之后,跟把数据读到内存放到map里,然后map(key,vale)查找有什么区别
请问,sqlserver把表全部装在到内存怎么装载。
装在之后的select语句,跟程序把数据读到内存放到map里,然后map(key,vale)查找,
哪个速度快,如果并发5000人访问,有区别吗。
问题点数:50、回复次数:21Top
1 楼zjcxc(邹建)回复于 2006-02-08 20:09:04 得分 1
-- 定义一个表变量(变量是保存在内存中的, 除非你的内存不够)
DECLARE @t TABLE(..... 结构与你select的结果相同)
-- 将select结果插入表变量(即是把select结果放入内在了)
INSERT @t SELECT ....Top
2 楼libin_ftsafe(子陌红尘:TS for Banking Card)回复于 2006-02-08 20:11:12 得分 40
DBCC PINTABLE?Top
3 楼wd_6532(用frontpage写asp,jsp,php,ace)回复于 2006-02-08 20:16:20 得分 0
以前就是用它 DBCC PINTABLE
1 DBCC PINTABLE之后,如果表被改变,那么select得到的是最新的数据吗?
2 DBCC PINTABLE之后, select 的速度快,还是从内存用map(key,value)的速度快。
3 表变量和DBCC PINTABLE 有什么区别,哪种好。
Top
4 楼wd_6532(用frontpage写asp,jsp,php,ace)回复于 2006-02-08 20:19:33 得分 0
另外全局临时表是否也可以达到目的?Top
5 楼zjcxc(邹建)回复于 2006-02-08 21:44:21 得分 1
变量没有全局的, 只适用于当前过程.
如果楼主要多个过程共用, 则只能用 dbcc pintable 的方法.Top
6 楼wd_6532(用frontpage写asp,jsp,php,ace)回复于 2006-02-08 21:58:05 得分 0
2 DBCC PINTABLE之后, select 的速度快,还是从内存用map(key,value)的速度快。
还是没有解决阿。Top
7 楼ReViSion(和尚)回复于 2006-02-08 22:21:58 得分 1
哈哈,帮UPTop
8 楼zhangyang555(张阳)回复于 2006-02-09 09:39:54 得分 1
gzTop
9 楼wd_6532(用frontpage写asp,jsp,php,ace)回复于 2006-02-09 10:24:42 得分 0
sqlserver 版的高手们呢?Top
10 楼javanow(骄子数据库技术网)回复于 2006-02-09 10:30:47 得分 1
sql server会自己管理,如果你要找的数据在内存里,他就直接在内存里找。
如果表小,你select一次就全到内存里了。如果表大你的内存也足够大,dbcc pintable
5000并发的访问?开什么玩笑,你的服务器能并发到5000?500都够怆。
你不用做什么MAP之类的特殊操作的,sql server会自动帮管完成。
--------------------------
http://chinadba.cn
深圳骄子数据库服务网
最具实战经验的数据库优化、管理、设计、培训。Top
11 楼wd_6532(用frontpage写asp,jsp,php,ace)回复于 2006-02-09 16:03:24 得分 0
那就是说dbcc pintable之后 select语句比 map速度快了.
那为什么我同事在做号段(8万条记录)匹配的时候,还要从内存里哈希,而不直接select?
100行数据选1行的selet, 2万的服务器每秒能执行多少次.
Top
12 楼wd_6532(用frontpage写asp,jsp,php,ace)回复于 2006-02-09 18:10:47 得分 0
upTop
13 楼javanow(骄子数据库技术网)回复于 2006-02-09 23:09:18 得分 1
100行的数据,select 1 次以后,以后就会在内存里,所以你select 时实际就是直接与内存打交道。
至于可以执行多少次,你做个在你服务器上做个循环测试下的。这样就可以比下谁快的。
我也希望有个最终的结果,希望楼主能公布一下。
--------------------------
http://chinadba.cn
深圳骄子数据库服务网
最具实战经验的数据库优化、管理、设计、培训。
Top
14 楼wd_6532(用frontpage写asp,jsp,php,ace)回复于 2006-02-09 23:25:05 得分 0
你是专门做数据库优化的,你有空就做一下吧,
我做的话容易不具有可比较性.Top
15 楼test2002(test2002)回复于 2006-02-10 10:53:09 得分 1
1 DBCC PINTABLE之后,如果表被改变,那么select得到的是最新的数据吗?
2 DBCC PINTABLE之后, select 的速度快,还是从内存用map(key,value)的速度快。
3 表变量和DBCC PINTABLE 有什么区别,哪种好。
---------------------------------------------
看了sql server帮助
1、好象不行哦,更新了表,内存没有同步更新哦,遗憾!
2、帮助上说,倒入内存的表不能太大,最好是比较小的表,这样导入速度才快。
3、表变量在7.0版没有,不过dbcc pintable好象不够理想。
4、如果表查询不复杂,表很大,内存也很大,能装下表内容,个人感觉对于要频繁查询这个表的程序来说,特别是并发查询。不如放入内存,自己管理,采用平衡树的算法,肯定效率有大的提高。最好不要使用hash算法,对于大表来说,占内存大,而且效率也降低了。Top
16 楼test2002(test2002)回复于 2006-02-10 10:53:43 得分 1
1 DBCC PINTABLE之后,如果表被改变,那么select得到的是最新的数据吗?
2 DBCC PINTABLE之后, select 的速度快,还是从内存用map(key,value)的速度快。
3 表变量和DBCC PINTABLE 有什么区别,哪种好。
---------------------------------------------
看了sql server帮助
1、好象不行哦,更新了表,内存没有同步更新哦,遗憾!
2、帮助上说,倒入内存的表不能太大,最好是比较小的表,这样导入速度才快。
3、表变量在7.0版没有,不过dbcc pintable好象不够理想。
4、如果表查询不复杂,表很大,内存也很大,能装下表内容,个人感觉对于要频繁查询这个表的程序来说,特别是并发查询。不如放入内存,自己管理,采用平衡树的算法,肯定效率有大的提高。最好不要使用hash算法,对于大表来说,占内存大,而且效率也降低了。Top
17 楼test2002(test2002)回复于 2006-02-10 10:58:47 得分 1
100行的数据,select 1 次以后,以后就会在内存里,所以你select 时实际就是直接与内存打交道。
至于可以执行多少次,你做个在你服务器上做个循环测试下的。这样就可以比下谁快的。
我也希望有个最终的结果,希望楼主能公布一下。
------------------------------------------------------------------------
你说得不准确,我就做个测试,查了一个大表,用select查询用了5分钟,
然后使用同样的select查询,仍然用了5分钟(我的记录是千万行级别的)
所以和你说的出入很大,特别对于大表来说。Top
18 楼wd_6532(用frontpage写asp,jsp,php,ace)回复于 2006-02-11 00:02:10 得分 0
1、好象不行哦,更新了表,内存没有同步更新哦,遗憾!
==============
我试了一下,dbcc pintable没有报错,也就是成功了.
我改变表中的数据,然后select出来的是更新后的数据.Top
19 楼javanow(骄子数据库技术网)回复于 2006-02-11 10:21:12 得分 1
呵.如果你能把数据读出去放到别的机器上运算,当然推荐这样做.
因为至少分流了数据库压力.
数据库对运算不是很在行,它的长处在存取数据.
--------------------------
http://chinadba.cn
深圳骄子数据库服务网
最具实战经验的数据库优化、管理、设计、培训。Top
20 楼wd_6532(用frontpage写asp,jsp,php,ace)回复于 2006-02-14 11:53:45 得分 0
upTop
21 楼test2002(test2002)回复于 2006-02-16 08:54:26 得分 0
我试了一下,dbcc pintable没有报错,也就是成功了.
我改变表中的数据,然后select出来的是更新后的数据.
--------------------------------
没从内存中读,从硬盘上读的,不奇怪!Top




