有没有办法让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#)访问内存或向量。
我正在想创build一个UDF,可以将表转换成一个数组,但希望这个过程都是内部的。
所以我想在内存中的表,以避免出口和导入,也避免写入磁盘…
在SQL Server 2005以前的版本中,DBCC PINTABLE被用来在内存中插入表,但是它有一些固有的数据损坏问题。 当命令DBCC PINTABLE仍然存在时,它什么也不做。
我觉得你太复杂了。 只有在内存中不存在的情况下,SQL Server才会从磁盘读取数据。 一旦它在内存中,它将一直呆在那里,直到它不被使用一段时间,或者让它读取别的东西。 如果你有足够的内存(这是完全相对的),那么你的表可能已经在内存中。 我在这里简化了一下。 它使用LRU-kalgorithm将页面保存在caching中。 10行10列smallint / int数据将适合一页,即8KB,你应该停止追求你最初的计划。
参考: http : //msdn.microsoft.com/en-us/library/ms191475.aspx
一个页面在caching中,即使你更新了数据,它也不会立即写入磁盘,而且还有一个asynchronous进程(CHECKPOINT,Lazy writer)将这个数据刷新到磁盘。 您可以更新数据100次,并且SQL Server可能只写入一次磁盘。 这取决于你是否已经与恢复内部标志混淆了,数据量变化以及类似的东西。 我想在这个时候太多的信息。