ПОДДЕРЖКА SQL MS таблицы в оперативной памяти?

static void findmaxprofit(int[] stockvalues){
    int buy=0,sell=0,buyingpoint=0,sellingpoint=0,profit=0,currentprofit=0;
    int finalbuy=0,finalsell=0;
    if(stockvalues.length!=0){
        buy=stockvalues[0];
    }           
    for(int i=1;i<stockvalues.length;i++){  
        if(stockvalues[i]<buy&&i!=stockvalues.length-1){                
            buy=stockvalues[i];
            buyingpoint=i;
        }               
        else if(stockvalues[i]>buy){                
            sell=stockvalues[i];
            sellingpoint=i;
        }
        currentprofit=sell-buy;         
        if(profit<currentprofit&&sellingpoint>buyingpoint){             
            finalbuy=buy;
            finalsell=sell;
            profit=currentprofit;
        }

    }
    if(profit>0)
    System.out.println("Buy shares at "+finalbuy+" INR and Sell Shares "+finalsell+" INR and Profit of "+profit+" INR");
    else
        System.out.println("Don't do Share transacations today");
}
16
задан CinCout 21 June 2016 в 04:37
поделиться

7 ответов

@Keith

Это - распространенное заблуждение: Табличные переменные не обязательно хранятся в памяти. На самом деле SQL Server решает, сохранить ли переменную в памяти или проливать его к TempDB. Нет никакого надежного пути (по крайней мере, в SQL Server 2005), чтобы гарантировать, что данные таблицы сохранены в памяти. Для более подробного информационного взгляда здесь

13
ответ дан 30 November 2019 в 16:37
поделиться

Можно создать табличные переменные (в памяти), и два различных типов временной таблицы:

--visible only to me, in memory (SQL 2000 and above only)
declare @test table (
    Field1 int,
    Field2 nvarchar(50)
);

--visible only to me, stored in tempDB
create table #test (
    Field1 int,
    Field2 nvarchar(50)
)

--visible to everyone, stored in tempDB
create table ##test (
    Field1 int,
    Field2 nvarchar(50)
)
<час>

Редактирование:

После обратной связи я думаю, что этому нужно немного разъяснения.

#table и ##table всегда будет в TempDB.

@Table переменные обычно будут в памяти, но, как гарантируют, не будут. SQL решает на основе плана запросов и использует TempDB, если это должно.

18
ответ дан 30 November 2019 в 16:37
поделиться

Можно объявить "табличную переменную" в SQL Server 2005, как это:

declare @foo table (
    Id int,
    Name varchar(100)
);

Вы тогда обращаетесь к нему точно так же, как переменная:

select * from @foo f
    join bar b on b.Id = f.Id

Никакая потребность отбросить его - это уходит, когда переменная выходит из объема.

3
ответ дан 30 November 2019 в 16:37
поделиться

Польза сообщение в блоге здесь , но в основном префикс локальные временные таблицы с # и глобальный временный файл с ## - например,

CREATE TABLE #localtemp
1
ответ дан 30 November 2019 в 16:37
поделиться

Синтаксис, который Вы хотите:

создают таблицу #tablename

, # префикс идентифицирует таблицу как временную таблицу.

0
ответ дан 30 November 2019 в 16:37
поделиться

Использование CREATE TABLE #tmptablename

префикс хеша/знака фунта

0
ответ дан 30 November 2019 в 16:37
поделиться

Я понимаю, чего вы пытаетесь достичь . Добро пожаловать в мир разнообразных баз данных!

SQL server 2000 поддерживает временные таблицы, созданные путем добавления префикса # к имени таблицы, что делает ее доступной локально временной таблицей (локальной для сеанса) и предшествующей ## имени таблицы , для глобально доступных временных таблиц, например #MyLocalTable и ## MyGlobalTable соответственно.

Сервер SQL 2005 и более поздних версий поддерживает как временные таблицы (локальные, глобальные), так и табличные переменные - обратите внимание на новые функции для табличных переменных в SQL 2008 и второй версии. ! Разница между временными таблицами и табличными переменными не так велика, но заключается в том, как сервер базы данных обрабатывает их.

Я бы не хотел говорить о более старых версиях SQL-сервера, таких как 7, 6, хотя я работал с ними и все равно откуда я пришел: -)

Принято считать, что переменные таблицы всегда находятся в памяти но это неправильно. В зависимости от использования памяти и объема транзакций сервера базы данных, страницы табличной переменной могут быть экспортированы из памяти и записаны в tempdb, а остальная обработка происходит там (в tempdb).

Обратите внимание, что tempdb - это база данных на экземпляре без постоянных объектов по своей природе, но он отвечает за обработку рабочих нагрузок, связанных с побочными транзакциями, такими как сортировка, и другой обработкой, которая носит временный характер. С другой стороны, Табличные переменные (обычно с меньшими данными) хранятся в памяти (ОЗУ), что ускоряет доступ к ним и, следовательно, уменьшает количество операций ввода-вывода на диск с точки зрения использования диска tempdb при использовании табличных переменных с меньшими данными по сравнению с временными таблицами, которые всегда регистрируются в tempdb.

Табличные переменные не могут быть проиндексированы, в то время как временные таблицы (как локальные, так и глобальные) могут быть индексированы для более быстрой обработки в случае большого количества данных. Таким образом, вы знаете свой выбор в случае более быстрой обработки больших объемов данных временными транзакциями. Также стоит отметить, что транзакции только с табличными переменными не регистрируются и не могут быть отменены, в то время как транзакции, выполненные с временными таблицами, могут быть отменены!

Таким образом, табличные переменные лучше подходят для небольших данных, а временные таблицы лучше для большие данные обрабатываются временно.

1
ответ дан 30 November 2019 в 16:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: