sql-server – 将表存储在内存中

前端之家收集整理的这篇文章主要介绍了sql-server – 将表存储在内存中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法让sql Server在内存中存储一​​个包含10个属性和10行的表?
a1   a2   a3  a4  a5  a6  a7  a8  a9 a10
----------------------------------------
138 498  365 345 500 473 498 125 134 800
448 498  362 348 500 463 498 625 165 700
468 498  625 329 500 435 498 625 345 600
437 701  365 326 500 453 498 625 645 500
438 498  326 329 500 438 498 625 745 400
439 499  626 329 500 438 498 525 685 300
440 500  327 328 500 423 498 627 655 200
444 214  331 334 500 428 498 125 615 100
448 498  362 348 500 463 498 225 165 700
468 498  625 329 500 435 498 425 345 600

我正在考虑制作一些矢量并使表格成一行(而不是10行的10个属性会产生一个大小为100的向量.有没有办法做到这一点?

你可能会问为什么我要这样做,这是因为我想在内存中做一些微积分,避免写或使用磁盘,然后用C或.NET访问内存或向量(也许是C#?)

我正在考虑创建一个可以将表转换为数组的UDF,但是希望这个过程都是内部的.

所以我希望内存中的表避免导出和导入,也避免写入磁盘…

>有没有办法执行UDF,存储过程会执行此操作?
>有没有办法将此表存储在连续的内存中?

解决方法

sql Server 2005之前的早期版本中,DBCC PINTABLE用于在内存中插入表,但它存在数据损坏的一些固有问题.虽然命令DBCC PINTABLE仍然存在,但它什么都不做.

我觉得你太复杂了.仅当内存中尚不存在数据时,sql Server才会从磁盘读取数据.一旦它在内存中,它将保持在那里,直到它不被使用一段时间或它让位于阅读其他东西.如果你有足够的内存(这是完全相对的),那么你的表可能已经在内存中.我在这里简化了一下.它使用LRU-k算法将页面保留在缓存中. 10行和10列sma​​llint / int数据将适合一页,即8KB,你应该停止追求你的初步计划.

参考:http://msdn.microsoft.com/en-us/library/ms191475.aspx

一个页面在缓存中,即使您更新数据也不会立即写入磁盘,并且有一个异步进程(CHECKPOINT,Lazy writer)以便稍后将此数据刷新到磁盘.您可以更新数据100次,sql Server可能只写入一次磁盘.这取决于你是否已经搞乱了恢复内部标志,数据量的变化以及类似的东西.我猜这时候它的信息太多了.

猜你在找的MsSQL相关文章