Есть ли способ заставить 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, который может преобразовывать таблицу в массив, но хотел бы, чтобы этот процесс был полностью внутренним.
Поэтому я хочу, чтобы таблица в памяти избегала экспорта и импорта, а также избегала записи на диск ...
В предыдущих версиях до SQL Server 2005 DBCC PINTABLE использовалась для вставки таблицы в память, но у нее были некоторые проблемы с повреждением данных. Хотя команда DBCC PINTABLE все еще существует, она просто ничего не делает.
Я думаю, вы слишком усложняете. SQL Server будет читать данные с диска только если его еще нет в памяти. Попав в память, он останется там до тех пор, пока НЕ перестанет использоваться какое-то время или не уступит место чтению чего-то еще. Если у вас достаточно памяти (это совершенно относительно), ваша таблица может уже быть в памяти. Я здесь немного упростил. Он использует алгоритм LRU-k для хранения страниц в кеше. 10 строк и 10 столбцов данных smallint / int уместятся на одной странице, т.е. 8 КБ, и вам следует прекратить следовать своему первоначальному плану.
Ссылка: http://msdn.microsoft.com/en-us/library/ms191475.aspx
Одна страница находится в кеше, даже если вы обновите данные, она не будет записана на диск немедленно, и существует асинхронный процесс (CHECKPOINT, Lazy Writing) для сброса этих данных на диск позже. Вы можете обновить данные, например, 100 раз, и возможно, что SQL Server записывает на диск только один раз. Это зависит от того, испортили ли вы внутренний флаг восстановления, количество изменений данных и тому подобное. Думаю, сейчас слишком много информации.