Mssql limit: Аналог LIMIT в MSSQL / Хабр

Содержание

Как реализовать LIMIT с SQL Server?



У меня есть этот запрос с MySQL:

select * from table1 LIMIT 10,20

Как я могу сделать это с SQL Server?

sql sql-server migration
Поделиться Источник Bigballs     02 марта 2009 в 19:54

18 ответов


  • Как использовать LIMIT [X] OFFSET [Y] с SQL Server 2005

    Возможный Дубликат : Эквивалент LIMIT и OFFSET для SQL Server? Как использовать LIMIT [X] OFFSET [Y] с SQL Server 2005, я вижу mysql, oracle, sqllite, postgre есть, microsoft не понимает, что нам это нужно ?

  • SQL Server TSQL эквивалентно ‘MySQL Limit’?

    Я знаю, что у MySQL есть команда limit, но я не знаю, какую команду я должен использовать в SQL server 2008? Мне нужно выбрать clientId и последний день каждого пикапа, большинство клиентов имеют несколько пикапов (65 000 + записей в таблице пикапов).

    select P.ClientID,LastName+’ ‘+FirsName as…



136

Начиная с SQL SERVER 2005, вы можете сделать это…

USE AdventureWorks;
GO
WITH OrderedOrders AS
(
    SELECT SalesOrderID, OrderDate,
    ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber'
    FROM Sales.SalesOrderHeader 
) 
SELECT * 
FROM OrderedOrders 
WHERE RowNumber BETWEEN 10 AND 20;

или что-то вроде этого для версий 2000 и ниже…

SELECT TOP 10 * FROM (SELECT TOP 20 FROM Table ORDER BY Id) ORDER BY Id DESC

Поделиться Leon Tayson     02 марта 2009 в 20:00



61

Неуклюже, но это сработает.

SELECT TOP 10 * FROM table WHERE id NOT IN (SELECT TOP 10 id FROM table ORDER BY id) FROM table ORDER BY id

упущение MSSQL пункта LIMIT является преступным, IMO. Вам не нужно делать такого рода обходные пути.

Поделиться ceejayoz     02 марта 2009 в 19:58



42

Начиная с SQL SERVER 2012, вы можете использовать предложение OFFSET FETCH:

USE AdventureWorks;
GO
SELECT SalesOrderID, OrderDate
FROM Sales.SalesOrderHeader 
ORDER BY SalesOrderID
    OFFSET 10 ROWS
    FETCH NEXT 10 ROWS ONLY;
GO

http://msdn.microsoft.com/en-us/ library/ms188385(v=sql.110).aspx

Это может работать неправильно, если заказ по не является уникальным.

Если запрос изменен на ПОРЯДОК OrderDate, возвращаемый результирующий набор не соответствует ожидаемому.

Поделиться user4047259    

16 сентября 2014 в 16:37



18

Это почти дубликат вопроса, который я задал в октябре: Эмулировать предложение MySQL LIMIT в Microsoft SQL Server 2000

Если вы используете Microsoft SQL Server 2000, хорошего решения не существует. Большинству людей приходится прибегать к записи результата запроса во временную таблицу с первичным ключом IDENTITY . Затем выполните запрос к столбцу первичного ключа, используя условие BETWEEN .

Если вы используете Microsoft SQL Server 2005 или более позднюю версию, у вас есть функция ROW_NUMBER() , поэтому вы можете получить тот же результат, но избежать временной таблицы.

SELECT t1.*
FROM (
    SELECT ROW_NUMBER OVER(ORDER BY id) AS row, t1.*
    FROM ( ...original SQL query... ) t1
) t2
WHERE t2.row BETWEEN @offset+1 AND @offset+@count;

Вы также можете записать это как общее табличное выражение , как показано в ответе @Leon Tayson .

Поделиться Bill Karwin     02 марта 2009 в 20:04



18

Вот как я ограничиваю результаты в MS SQL Server 2012:

SELECT * 
FROM table1
ORDER BY columnName
  OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY

NOTE: OFFSET можно использовать только с ORDER BY или в тандеме с ним .

Чтобы объяснить строку кода OFFSET xx ROWS FETCH NEXT yy ROW ONLY

xx -это номер записи/строки, который вы хотите начать извлекать из таблицы, т. Е.: если в таблице 1 40 записей, приведенный выше код начнет извлекать из строки 10.

yy — это количество записей/строк, которые вы хотите извлечь из таблицы.

Чтобы построить на предыдущем примере: если таблица 1 содержит 40 записей, и вы начали вытягивать из строки 10 и захватили набор NEXT из 10 (

yy ). Это означало бы, что приведенный выше код будет извлекать записи из таблицы 1, начиная со строки 10 и заканчивая строкой 20. При этом вытягивают ряды 10 — 20.

Проверьте ссылку для получения дополнительной информации о OFFSET

Поделиться Jeremy     19 мая 2016 в 14:19


  • SQL server 2008 не поддерживает LIMIT

    Я пытаюсь использовать LIMIT в SQL server 2008, но он не работает, что я могу сделать, я новичок в SQL я использовал mySQL раньше. Вот запрос SQL, который я пытаюсь выполнить: SELECT * FROM konto WHERE id_e_klientit = 9 ORDER BY koha_relizimit DESC LIMIT 1

  • Использование limit() на Select в ZF2 с SQL Server

    e: просто понял, что это может иметь какое-то отношение к тому факту, что это SQL Server. Кто-нибудь знает ZF2, эквивалентный LIMIT для SQL Server? Всем привет, застрял с ZF2, как всегда. У меня есть метод fetchAll() в классе, который выбирает строки из определенной таблицы. Теперь этот метод…



12

SELECT  *
FROM    (
        SELECT  TOP 20
                t.*, ROW_NUMBER() OVER (ORDER BY field1) AS rn
        FROM    table1 t
        ORDER BY
                field1
        ) t
WHERE   rn > 10

Поделиться Quassnoi     02 марта 2009 в 20:05



9

Синтаксически запрос MySQL LIMIT выглядит примерно так:

SELECT * FROM table LIMIT OFFSET, ROW_COUNT

Это может быть переведено на Microsoft SQL Server как

SELECT * FROM 
(
    SELECT TOP #{OFFSET+ROW_COUNT} *, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS rnum 
    FROM table
) a
WHERE rnum > OFFSET

Теперь ваш запрос select * from table1 LIMIT 10,20 будет выглядеть следующим образом:

SELECT * FROM 
(
    SELECT TOP 30 *, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS rnum 
    FROM table1
) a
WHERE rnum > 10 

Поделиться Unknown     06 марта 2012 в 12:13


Поделиться Ólafur Waage     02 марта 2009 в 19:56



2

Это одна из причин, по которой я стараюсь избегать использования MS Server… но все равно. Иногда у вас просто нет выбора (да! и мне приходится использовать устаревшую версию!!).

Мое предложение состоит в том, чтобы создать виртуальную таблицу:

От:

SELECT * FROM table

К:

CREATE VIEW v_table AS    
    SELECT ROW_NUMBER() OVER (ORDER BY table_key) AS row,* FROM table

Тогда просто запросите:

SELECT * FROM v_table WHERE row BETWEEN 10 AND 20

При добавлении или удалении полей «row» обновляется автоматически.

Основная проблема с этой опцией заключается в том, что порядок ПО фиксирован. Поэтому, если вы хотите другой порядок, вам придется создать другое представление.

UPDATE

В этом подходе есть еще одна проблема: если вы попытаетесь отфильтровать свои данные, они не будут работать должным образом. Например, если вы это сделаете:

SELECT * FROM v_table WHERE field = 'test' AND row BETWEEN 10 AND 20

WHERE ограничивается теми данными, которые находятся в строках между 10 и 20 (вместо поиска по всему набору данных и ограничения выходных данных).

Поделиться lepe     17 апреля 2014 в 03:10



1

Это многоступенчатый подход, который будет работать в SQL2000.

-- Create a temp table to hold the data
CREATE TABLE #foo(rowID int identity(1, 1), myOtherColumns)

INSERT INTO #foo (myColumns) SELECT myData order By MyCriteria

Select * FROM #foo where rowID > 10

Поделиться souLTower     02 марта 2009 в 20:09



1

SELECT 
    * 
FROM 
    (
        SELECT 
            top 20              -- ($a) number of records to show
            * 
        FROM
            (
                SELECT 
                    top 29      -- ($b) last record position
                    * 
                FROM 
                    table       -- replace this for table name (i.e. "Customer")
                ORDER BY 
                    2 ASC
            ) AS tbl1 
        ORDER BY 
            2 DESC
    ) AS tbl2 
ORDER BY 
    2 ASC;

-- Examples:

-- Show 5 records from position 5:
-- $a = 5;
-- $b = (5 + 5) - 1
-- $b = 9;

-- Show 10 records from position 4:
-- $a = 10;
-- $b = (10 + 4) - 1
-- $b = 13;

-- To calculate $b:
-- $b = ($a + position) - 1

-- For the present exercise we need to:
-- Show 20 records from position 10:
-- $a = 20;
-- $b = (20 + 10) - 1
-- $b = 29;

Поделиться Julian Moreno     28 февраля 2013 в 15:28




1

Надо попытаться. В приведенном ниже запросе вы можете увидеть группировку по, порядок по, Пропуск строк и ограничение строк.

select emp_no , sum(salary_amount) from emp_salary
Group by emp_no 
ORDER BY emp_no 
OFFSET 5 ROWS       -- Skip first 5 
FETCH NEXT 10 ROWS ONLY; -- limit to retrieve next 10 row after skiping rows

Поделиться M Danish    

12 апреля 2018 в 11:21



0

Если ваш ID является уникальным типом идентификатора или ваш идентификатор в таблице не отсортирован, вы должны сделать так, как показано ниже.

select * from
(select ROW_NUMBER() OVER (ORDER BY (select 0)) AS RowNumber,* from table1) a
where a.RowNumber between 2 and 5

Код будет

select * from limit 2,5

Поделиться user3244012     11 октября 2018 в 05:29



0

В SQL нет ключевого слова LIMIT. Если вам нужно только ограниченное количество строк, вы должны использовать ключевое слово TOP, которое похоже на LIMIT.

Поделиться Mitul Panchal     23 января 2018 в 05:04



0

лучше использовать это в MSSQLExpress 2017 году.

SELECT * FROM
(
    SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) as [Count], * FROM table1
) as a
WHERE [Count] BETWEEN 10 and 20;

—Предоставление столбца [Count] и присвоение каждой строке уникального подсчета без заказа чего-либо, а затем повторный выбор снова, где вы можете предоставить свои ограничения.. 🙂

Поделиться user1308314     09 августа 2019 в 01:54



0

Подход

MYSQL:

SELECT 'filds' FROM 'table' WHERE 'where' LIMIT 'offset','per_page'

MSSQL:

SELECT 'filds' FROM 'table' WHERE 'where' ORDER BY 'any' OFFSET 'offset' 
ROWS FETCH NEXT 'per_page' ROWS ONLY

Заказ ПО является обязательным

Поделиться Turendu     03 февраля 2020 в 13:08



0

Один из возможных способов получить результат , как показано ниже, надеюсь, что это поможет.

declare @start int
declare @end int
SET @start = '5000';  -- 0 , 5000 ,
SET @end = '10000'; -- 5001, 10001
SELECT * FROM ( 
  SELECT TABLE_NAME,TABLE_TYPE, ROW_NUMBER() OVER (ORDER BY TABLE_NAME) as row FROM information_schema.tables
 ) a WHERE a.row > @start and a.row <= @end

Поделиться Pragnesh Karia     14 декабря 2019 в 10:55



-2

Если я правильно помню (прошло некоторое время с тех пор, как я использовал SQL Server), вы можете использовать что-то вроде этого: (2005 и выше)

SELECT
    *
   ,ROW_NUMBER() OVER(ORDER BY SomeFields) AS [RowNum]
FROM SomeTable
WHERE RowNum BETWEEN 10 AND 20

Поделиться Kris     02 марта 2009 в 20:02


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


Как написать (MySQL) «LIMIT» в SQL Server?

У меня есть проблема, когда я пытаюсь изменить запрос с LIMIT с MYSQL на SQL-Server. Проверьте это : SELECT * FROM tableEating WHERE person = ‘$identity’ LIMIT 1; Я пытался изменить его с помощью…


Lib для LIMIT заявления в SQL SERVER?

Есть ли какая-то lib или функция, которую я могу использовать, чтобы взять мой базовый оператор sql и преобразовать оператор limit в совместимый оператор sql server?


Как я могу сделать MySQL LIMIT в SQL Server?

Я извлекаю тысячи данных из базы данных. Я хотел бы показать на веб-страницах лимит в 100 записей. Я могу показать первую запись 100 со следующим SQL: SELECT TOP 100 * FROM TBLStock И как я могу…


Как использовать LIMIT [X] OFFSET [Y] с SQL Server 2005

Возможный Дубликат : Эквивалент LIMIT и OFFSET для SQL Server? Как использовать LIMIT [X] OFFSET [Y] с SQL Server 2005, я вижу mysql, oracle, sqllite, postgre есть, microsoft не понимает, что нам…


SQL Server TSQL эквивалентно ‘MySQL Limit’?

Я знаю, что у MySQL есть команда limit, но я не знаю, какую команду я должен использовать в SQL server 2008? Мне нужно выбрать clientId и последний день каждого пикапа, большинство клиентов имеют…


SQL server 2008 не поддерживает LIMIT

Я пытаюсь использовать LIMIT в SQL server 2008, но он не работает, что я могу сделать, я новичок в SQL я использовал mySQL раньше. Вот запрос SQL, который я пытаюсь выполнить: SELECT * FROM konto…


Использование limit() на Select в ZF2 с SQL Server

e: просто понял, что это может иметь какое-то отношение к тому факту, что это SQL Server. Кто-нибудь знает ZF2, эквивалентный LIMIT для SQL Server? Всем привет, застрял с ZF2, как всегда. У меня…


Разве LIMIT не допускается в sql server 2008?

У меня есть вопрос SELECT employeedept, execoffice_status, employee, COUNT(*) AS ’employeetotal’, YEAR_cse1 =YEAR(execoffice_date) FROM CSEReduxResponses WHERE execoffice_status = 1 GROUP BY…


Как использовать limit в Microsoft SQL Server 2008?

Мы должны использовать ключевое слово Limit в SQL server 2008/2012. Нам нужно применить ограничение для каждого запроса, где начальный индекс будет меняться каждый раз. Когда я гуглил, нашел TOP, но…


SQL Server LIMIT 1 и LIMIT 1,1 синтаксическая ошибка

Интересно, что я не нашел никакого сообщения по этому конкретному, но основному вопросу. Цель: обновить последнюю запись budgetid docstatus = 0. Затем я хочу обновить запись next-to-last budgetid…

Оператор SQL LIMIT: синтаксис, примеры

Оператор SQL LIMIT позволяет вывести указанное число строк из таблицы. Оператор SQL LIMIT записывается всегда в конце запроса.

Используется в СУБД MySQL. Аналогом в MS SQL Server является оператор SQL TOP.

Оператор LIMIT имеет следующий синтаксис:

LIMIT first_row [, last_row]

Оператор SQL LIMIT выводит то количество записей, которое указано в параметре first_row. Если, через запятую указано значение параметра last_row, то будут выведены строки в диапазоне first_row — last_row включительно.


Примеры оператора SQL LIMIT: Имеется следующая таблица Universities:

IDUniversityNameStudentsFacultiesProfessoresLocationSite
1Perm State National Research University12400121229Permpsu.ru
2Saint Petersburg State University213002413126Saint-Petersburg spbu.ru
3Novosibirsk State University7200131527Novosibirsknsu.ru
4Moscow State University351003914358Moscowmsu.ru
5Higher School of Economics20335121615Moscowhse.ru
6Ural Federal University57000195640Yekaterinburgurfu.ru
7National Research Nuclear University860010936Moscowmephi.ru

Пример 1. С использованием оператора SQL LIMIT вывести первые 2 записи таблицы:

SELECT * FROM Universities LIMIT 2

Результат:

IDUniversityNameStudentsFacultiesProfessoresLocationSite
1Perm State National Research University12400121229Permpsu.ru
2Saint Petersburg State University213002413126Saint-Petersburg spbu.ru

Пример 2. С использованием оператора SQL LIMIT вывести названия университетов из таблицы с 4 по 6:

SELECT UniversityName FROM Universities LIMIT 4, 6

Результат:

UniversityName
Moscow State University
Higher School of Economics
Ural Federal University

SQL оператор SELECT LIMIT — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

В этом учебном материале вы узнаете, как использовать оператор SELECT LIMIT в SQL, с синтаксисом и примерами.

Описание

SQL оператор SELECT LIMIT используется для извлечения записей из одной или нескольких таблиц в базе данных и ограничения количества возвращаемых записей на основании предельного значения.

Подсказка: SELECT LIMIT поддерживается не во всех базах данных SQL.
Для баз данных, таких как SQL Server или MSAccess, используйте оператор SELECT TOP, чтобы ограничить свои результаты. Оператор SELECT TOP является патентованным эквивалентом оператора SELECT LIMIT.

Синтаксис

Синтаксис для оператора SELECT LIMIT в SQL.

SELECT expressions
FROM tables
[WHERE conditions]
[ORDER BY expression [ ASC | DESC ]]
LIMIT number_rows [ OFFSET offset_value ];

Параметры или аргумент

expressions
Столбцы или расчеты, которые вы хотите получить
tables
Таблицы, из которых вы хотите получить записи. В предложении FROM должна быть указана хотя бы одна таблица
WHERE conditions
Необязательный. Условия, которые должны быть выполнены для записей, которые будут выбраны
ORDER BY expression
Необязательный. Он используется в операторе SELECT LIMIT, чтобы вы могли упорядочить результаты и выбрать те записи, которые вы хотите вернуть. ASC — возрастающий порядок, а DESC — убывающий
LIMIT number_rows
Он указывает ограниченное количество строк в наборе результатов, которые должны быть возвращены на основе number_rows. Например, LIMIT 10 вернет первые 10 строк, соответствующих критериям SELECT. Именно здесь важен порядок сортировки, поэтому обязательно используйте предложение ORDER BY соответствующим образом
OFFSET offset_value
Необязательный. Первая строка, возвращаемая LIMIT, будет определена offset_value

Пример — использование ключевого слова LIMIT

Давайте посмотрим, как использовать оператор SELECT с опцией LIMIT в SQL.
Например.

SELECT contact_id, last_name, first_name FROM contacts WHERE website = ‘Google.com’ ORDER BY contact_id DESC LIMIT 5;

SELECT contact_id,

       last_name,

   first_name

  FROM contacts

WHERE website = ‘Google.com’

ORDER BY contact_id DESC

LIMIT 5;

В этом SQL примере SELECT LIMIT будут выбраны первые 5 записей из таблицы contacts, где website — ‘Google.com’. Обратите внимание, что результаты сортируются по contact_id в порядке убывания, поэтому это означает, что 5 самых максимальных значений contact_id будут возвращены оператором SELECT LIMIT.
Если в таблице contacts есть другие записи со значением website ‘Google.com’, они не будут возвращены оператором SELECT LIMIT в SQL.
Если бы мы хотели выбрать 5 самых минимальных значений contact_id вместо самых максимальных, мы могли бы изменить порядок сортировки следующим образом.

SELECT contact_id, last_name, first_name FROM contacts WHERE website = ‘Google.com’ ORDER BY contact_id ASC LIMIT 5;

SELECT contact_id,

       last_name,

   first_name

  FROM contacts

WHERE website = ‘Google.com’

ORDER BY contact_id ASC

LIMIT 5;

Теперь результаты будут отсортированы по contact_id в порядке возрастания, поэтому первые 5 самых минимальных записей contact_id, которые имеют website — ‘Google.com’, будут возвращены этим запросом SELECT LIMIT. Никакие другие записи не будут возвращены этим запросом.

Пример — использование ключевого слова OFFSE

Ключевое слово offset позволяет сместить первую запись, возвращаемую предложением LIMIT. Например.

Это предложение LIMIT вернет 3 записи в наборе результатов со смещением 1. Это означает, что оператор SELECT пропустит первую запись, которая обычно будет возвращена, и вместо этого вернет вторую, третью и четвертую записи.
Давайте посмотрим, как использовать оператор SELECT LIMIT с предложением OFFSET в SQL.
Например.

SELECT contact_id, last_name, first_name FROM contacts WHERE website = ‘Google.com’ ORDER BY contact_id DESC LIMIT 5 OFFSET 2;

SELECT contact_id,

   last_name,

   first_name

  FROM contacts

WHERE website = ‘Google.com’

ORDER BY contact_id DESC

LIMIT 5 OFFSET 2;

В этом SQL примере SELECT LIMIT используется OFFSET, равный 2, что означает, что первая и вторая записи в наборе результатов будут пропущены … и затем будут возвращены следующие 5 строк.

Особенности ограничения памяти SQL Server и что изменилось в SQL Server 2016

Есть несколько вариантов ограничения памяти, некоторые настраиваем мы, а не которые устанавливает Microsoft.

Ограничение памяти редакцией SQL Server

Поговорим сначала о том, что изменить нам не представляется возможным, а именно ограничение памяти на редакцию SQL Server. От версии к версии эти пороги меняются, сегодня я хотел бы остановиться на SQL Server 2014, остальные версии можно посмотреть тут.

Имя функцииEnterpriseBusiness IntelligenceStandard EditionExpress
Максимальный объем используемой памятиMAX64 ГБ64 ГБ1 ГБ

Как мы видим, для нагруженных решений, редакции Standard будет недостаточно, а Enterprise стоит значительно больше (в среднем в 4 раза больше если сравнивать лицензии на ядра).

Ограничение памяти экземпляру SQL Server

Теперь перейдём к ограничению на которое мы можем повлиять, а именно к параметру экземпляра max server memory. Данный параметр ограничивает память выделяемую для экземпляра, но охватывает не весь её объём. Max server memory ограничивает только баффер пул (далее buffer pool), если не вдаваться в детали, то buffer pool это область памяти SQL Server отвечающая за весь кэш страниц данных и индексов. Остальная часть кэша (процедурный, backup, для поддержки dll и тд) используется вне buffer pool. Память управляется клерками памяти, посмотреть все их виды и используемые ими ресурсы можно тут. Именно по этой причине вы могли видеть что экземпляр часто съедает больше памяти чем мы выставили в max server memory.

max server memory может быть изменён 2 способами:
  1. С помощью T-SQL команд

— Сначала включаем возможность расширенного изменения конфигурации SQL Server sp_configure ‘show advanced option’, 1 RECONFIGURE GO — Устанавливаем максимальное количество оперативной памяти для buffer pool в 2048 sp_configure ‘max server memroy’, 2048 RECONFIGURE

— Сначала включаем возможность расширенного изменения конфигурации SQL Server

sp_configure ‘show advanced option’, 1

RECONFIGURE

 

GO

 

— Устанавливаем максимальное количество оперативной памяти для buffer pool в 2048

sp_configure ‘max server memroy’, 2048

RECONFIGURE

2. С помощью SQL Server Management Studion:

Правая кнопка мышки на сервере > Свойства > раздел Память > указать в разделе max server memory нужное значение > ОК

Ограничение памяти с помощью Регулятора Ресурсов

Так же у нас есть возможность опуститься ещё на 1 уровень ниже и ограничить память для конкретных подключений с помощью Регулятора Ресурсов (Resource Governor). В данном компоненте создаются пулы ресурсов, группы рабочих нагрузок  и функция распределения подключений по группам рабочих нагрузок (подробнее здесь). С помощью Resource Governor мы можем разделить ресурсы экземпляра SQL Server на группы и раздать эти группы, по определённой логике, разным пользователям. Данный функционал доступен только в Enterprise Edition.

Особенности определения реально используемой памяти SQL Server

Понять сколько использует памяти SQL Server можно с помощью диспетчера задач, но если у вас на сервере включена ‘блокировка страниц в памяти’, то данный способ не покажет реальной картины. В таком случае, чтобы посмотреть количество используемой памяти вам потребуется обратиться к счётчикам производительности или написать запрос к представлению sys.dm_os_performance_counters:

  1. Запрос будет выглядеть следующим образом

SELECT cntr_value/1024 as memory FROM sys.dm_os_performance_counters WHERE counter_name like ‘%Total Server Memory%’

SELECT cntr_value/1024 as memory FROM sys.dm_os_performance_counters WHERE counter_name like ‘%Total Server Memory%’

2. Счётчик производительности можно найти в Performance Monitor — SQL Server:Memory Manager\Total Server Memory (KB)

Новое поведение ограничения памяти в SQL Server 2016

Память под In-Memory OLTP и колоночные индексы в памяти выделяется не из buffer pool, а через другие клерки, по этой причине ограничение max server memory на данные компоненты не подействует. В SQL Server 2016 были добавлены следующие лимиты:

Обратите внимание, что лимит для колоночных индексов в памяти указан для всего экземпляра, а для In-Memory OLTP в рамках одной БД.

Как и в предыдущих версиях SQL Server нет никаких других ограничений по памяти кроме как для buffer pool (max server memory), In-Memory OLTP и колоночных индексов в памяти. Остальные клерки памяти так же могут использовать ресурсы сверх ожидаемых.

Пример: SQL Server Standard Edition имеет ограничение buffer pool в 128 Гб оперативной памяти (ограничение редакции), то есть для страниц данных и индексов максимальный лимит 128 Гб. Начиная с SQL Server 2016 Sp1 вы можете дополнительно использовать 32 Гб памяти для колоночных индексов в памяти и 32 Гб для In-Memory OLTP (для каждой БД), плюс память, используемая другими клерками.

Facebook

Twitter

Вконтакте

Google+

Оператор SQL: LIMIT. — it-black.ru

Оператор LIMIT позволяет вывести указанное число строк из таблицы. Оператор записывается всегда в конце запроса. LIMIT – это аналог оператора TOP.


// Синтаксис оператора

LIMIT first_row [, last_row]

Оператор LIMIT выводит то количество записей, которое указано в параметре first_row. Если, через запятую указано значение параметра last_row, то будут выведены строки в диапазоне first_row — last_row включительно.

Примеры оператора. Имеется следующая таблица Universities:

IDUniversityNameStudentsFacultiesProfessoresLocationSite
1Perm State National Research University12400121229Permpsu.ru
2Saint Petersburg State University213002413126Saint-Petersburg spbu.ru
3Novosibirsk State University7200131527Novosibirsknsu.ru
4Moscow State University351003914358Moscowmsu.ru
5Higher School of Economics20335121615Moscowhse.ru
6Ural Federal University57000195640Yekaterinburgurfu.ru
7National Research Nuclear University860010936Moscowmephi.ru

Пример 1. С использованием оператора LIMIT вывести названия университетов из таблицы с 4 по 6:


SELECT UniversityName FROM Universities LIMIT 3, 3;

Результат:

UniversityName
Moscow State University
Higher School of Economics
Ural Federal University

Пример 2. С использованием оператора LIMIT вывести первые 2 записи таблицы:


SELECT * FROM Universities LIMIT 2;

Результат:

IDUniversityNameStudentsFacultiesProfessoresLocationSite
1Perm State National Research University12400121229Permpsu.ru
2Saint Petersburg State University213002413126Saint-Petersburg spbu.ru

Видео по оператору:



Изменение параметров использования памяти MS SQL Server 2012

В данной статье будет рассмотрена закладка «Память» (Memory) окна настройки параметров MS SQL Server 2012 (справедливо и для MS SQL Server 2008 (R2)). На данной закладке можно указать лимиты использования памяти SQL Server 2012, а также задать размер памяти для запроса и для создания индекса.

 

 


Запускаем утилиту «SQL Server Management Studio». В Microsoft Windows server 2012 R2 ее можно найти в списке всех программ.

В Microsoft Windows Server 2008 R2 в меню «Пуск» (Start) — «Microsoft SQL Server 2012» — «Среда SQL Server Management Studio».

Вводим имя экземпляра сервера, данные для авторизации и нажимаем «Соединить» (Connect).

В окне справа, в обозревателе объектов, кликаем правой кнопкой мыши по верхнему узлу дерева, содержащую строку соединения с сервером, и в контекстном меню выбираем «Свойства» (Properties).

В открывшемся окне «Свойства сервера» (Server Properties) переходим на вкладку «Память» (Memory), на которой доступны для изменения следующие параметры:

  • Минимальный размер памяти сервера (Minimum server memory) — Указывает минимальный размер оперативной памяти в мегабайтах, который будет выделен при запуске SQL Server и не будет в дальнейшем уменьшаться. Следует задавать такое значение, чтобы SQL Server не мешал работе операционной системы и программ, работающих на данном компьютере.
  • Максимальный размер памяти сервера (Maximum server memory) — Максимальный объем оперативной памяти в мегабайтах, который может использовать SQL Server во время работы. Устанавливать данный параметр имеет смысл если известно, что одновременно с SQL Server будет запущено несколько других приложений, которые используют весь объем памяти, доступный в момент запуска и не запрашивают ее дополнительно (т. е. не запрашивают память при необходимости). В этом случае необходимо установить такое значение максимального размера памяти сервера, при котором обеспечивается необходимый для приложения объем памяти, не занимаемый SQL Server. Минимальный объем памяти, который можно установить для данного параметра равен 64 мегабайтам  для 32-разрядных систем и 128 МБ для 64-разрядных систем.
  • Память для создания индекса (Index creation memory) — Устанавливает объем памяти в килобайтах, который используется во время операции сортировки при создании индекса. Значение по умолчанию, равное 0, соответствует динамическому распределению, которое можно использовать в большинстве случаев без дальнейшей настройки. Значения задаются в диапазоне от 704 до 2 147 483 647.
  • Минимальный объем памяти для запроса (Minimum memory per query) — Устанавливает объем памяти в килобайтах, выделяемый для выполнения запроса. Возможно задать значение в диапазоне от 512 до 2 147 483 647 килобайт. Значение по умолчанию — 1024.

Введя необходимые параметры, нажимаем «ОК» для сохранения изменений.

Для того, чтобы просмотреть, вступили ли в силу внесенные изменения, заново откроем окно «Свойства сервера» (Server Properties) на вкладке «Память» (Memory) и установим переключатель, располагающийся внизу формы, в значение «Текущие значения» (Running values).

Если текущие значения остались прежними, значит требуется перезапуск экземпляра SQL server.

Смотрите также:

  • Удаление компонент MS SQL Server 2012

    Может случиться так, что в процессе установки MS SQL Server 2012 были установлены компоненты, необходимость в которых со временем отпала (или были установлены по ошибке). В этом случае, в целях…

  • Лицензирование MS SQL Server 2012

    В данной статье будут рассмотрены способы лицензирования Microsoft SQL Server 2012. Будет приведен краткий обзор каждого из способов лицензирования, а также указаны возможные варианты лицензирования для различных выпусков MS SQL Server…

  • Редакции MS SQL Server 2012

    Ниже приводится список существующих редакций Microsoft SQL Server 2012, а также приводится краткий обзор каждой из них.         Microsoft SQL Server 2012 предлагается в нескольких специально разработанных редакциях:…

Запись опубликована в рубрике Microsoft SQL Server 2012 с метками SQL. Добавьте в закладки постоянную ссылку.

SQL: оператор SELECT LIMIT


В этом руководстве по SQL объясняется, как использовать оператор SELECT LIMIT в SQL с синтаксисом и примерами.

Описание

Оператор SQL SELECT LIMIT используется для извлечения записей из одной или нескольких таблиц в базе данных и ограничения количества возвращаемых записей на основе предельного значения.

СОВЕТ: SELECT LIMIT поддерживается не во всех базах данных SQL.

Для таких баз данных, как SQL Server или MSAccess, используйте оператор SELECT TOP, чтобы ограничить результаты.Оператор SELECT TOP является проприетарным эквивалентом оператора SELECT LIMIT от Microsoft.

Синтаксис

Синтаксис оператора SELECT LIMIT в SQL:

 выражения SELECT
ИЗ столов
[ГДЕ условия]
[ORDER BY выражение [ASC | DESC]]
LIMIT number_rows [OFFSET offset_value]; 

Параметры или аргументы

выражений
Столбцы или вычисления, которые вы хотите получить.
столов
Таблицы, из которых вы хотите получить записи.В предложении FROM должна быть хотя бы одна таблица.
ГДЕ условия
Необязательно. Условия, которые должны быть выполнены для выбора записей.
ORDER BY выражение
Необязательно. Он используется в операторе SELECT LIMIT, чтобы вы могли упорядочить результаты и выбрать те записи, которые хотите вернуть. ASC — это возрастающий порядок, а DESC — убывающий.
LIMIT number_rows
Он определяет ограниченное количество строк в результирующем наборе, которое должно быть возвращено, на основе number_rows .Например, LIMIT 10 вернет первые 10 строк, соответствующих критериям SELECT. Здесь порядок сортировки имеет значение, поэтому обязательно используйте предложение ORDER BY соответствующим образом.
OFFSET offset_value
Необязательно. Первая строка, возвращаемая LIMIT, будет определяться значением offset_value .

Пример — использование ключевого слова LIMIT

Давайте посмотрим, как использовать оператор SELECT с предложением LIMIT в SQL.

Например:

 ВЫБЕРИТЕ contact_id, last_name, first_name
ИЗ контактов
ГДЕ веб-сайт = 'TechOnTheNet.com '
ЗАКАЗАТЬ ПО contact_id DESC
LIMIT 5; 

В этом примере SQL SELECT LIMIT будут выбраны первые 5 записей из таблицы контактов , где веб-сайт — «TechOnTheNet.com». Обратите внимание, что результаты отсортированы по contact_id в порядке убывания, поэтому это означает, что оператор SELECT LIMIT будет возвращать 5 наибольших значений contact_id .

Если в таблице контактов есть другие записи, у которых для веб-сайта указано значение ‘TechOnTheNet.com ‘, они не будут возвращены оператором SELECT LIMIT в SQL.

Если бы мы хотели выбрать 5 наименьших значений contact_id вместо наибольших, мы могли бы изменить порядок сортировки следующим образом:

 ВЫБЕРИТЕ contact_id, last_name, first_name
ИЗ контактов
ГДЕ веб-сайт = 'TechOnTheNet.com'
ЗАКАЗАТЬ ПО contact_id ASC
LIMIT 5; 

Теперь результаты будут отсортированы по contact_id в возрастающем порядке, поэтому первые 5 наименьших записей contact_id , у которых есть веб-сайт TechOnTheNet.com ‘будет возвращено этим оператором SELECT LIMIT. Никакие другие записи не будут возвращены этим запросом.

Пример — использование ключевого слова OFFSET

Ключевое слово offset позволяет вам смещать первую запись, возвращаемую предложением LIMIT. Например:

 ПРЕДЕЛ 3 СМЕЩЕНИЕ 1 

Это предложение LIMIT вернет 3 записи в результирующем наборе со смещением 1. Это означает, что оператор SELECT пропустит первую запись, которая обычно будет возвращена, и вместо этого вернет вторую, третью и четвертую записи.

Давайте посмотрим, как использовать оператор SELECT LIMIT с предложением OFFSET в SQL.

Например:

 ВЫБЕРИТЕ contact_id, last_name, first_name
ИЗ контактов
ГДЕ веб-сайт = 'TechOnTheNet.com'
ЗАКАЗАТЬ ПО contact_id DESC
LIMIT 5 OFFSET 2; 

В этом примере SQL SELECT LIMIT используется OFFSET, равное 2, что означает, что первая и вторая записи в наборе результатов будут пропущены … и затем будут возвращены следующие 5 строк.

Как ограничить строки в наборе результатов SQL Server

Проблема:

Вы хотите ограничить количество строк в наборе результатов SQL Server.

Пример:

В нашей базе данных есть таблица с именем toy с данными в столбцах id , name и price .

id наименование цена
161 Велосипед BMX 200,00
121 Робот Тоби 185,50
213 Рыбалка 25.00
102 Пазлы с животными 45,80
111 Набор гоночных гусениц 126,70
233 Easy Bricks 21,00

Подберем названия и цены игрушек. Но нам нужно увидеть только первые пять строк.

Решение 1:
ВЫБЕРИТЕ название, цену
ИЗ игрушки
ЗАКАЗАТЬ ПО ЦЕНЕ
СМЕЩЕНИЕ 0 РЯДОВ ВЫБРАТЬ ТОЛЬКО ПЕРВЫЕ 5 РЯДОВ;
 

Вот результат запроса:

наименование цена
Easy Bricks 21.00
Рыбалка 25,00
Пазлы с животными 45,80
Набор гоночных треков 126,70
Робот Тоби 185,50
Обсуждение:

Чтобы ограничить количество строк в наборе результатов, используйте ORDER BY с дополнительными предложениями OFFSET и FETCH. Сначала запрос сортирует строки (ORDER BY). Затем вы указываете SQL Server, какая строка должна быть первой в результирующем наборе (OFFSET…ROWS) и сколько строк нужно вернуть (FETCH… ONLY).

Предложение OFFSET помещается сразу после ORDER BY. Целое число указывает первую строку для подсчета (в SQL Server первая строка — 0, вторая строка — 1 и т. Д.), За которой следует ключевое слово ROW или ROWS. Вы можете использовать ROW или ROWS, но рекомендуется использовать ROW для 1 строки и ROWS для 0 и нескольких строк. Посмотрите на картинку:

В нашем примере мы сортируем по цене ( ORDER BY price ) и начинаем возвращать результаты с первой строки ( OFFSET 0 ROWS ).Затем мы используем FETCH с ключевым словом FIRST. Вы можете использовать ПЕРВЫЙ или СЛЕДУЮЩИЙ; рекомендуется использовать FIRST, если вы начинаете с первой строки, не пропуская никаких записей, и NEXT, если какие-либо строки опущены (т.е. если OFFSET больше 0).

Наконец, у нас есть количество строк для выбора и ключевое слово ROWS ONLY. Используйте ТОЛЬКО ROWS, если вы возвращаете несколько строк, и ROW ONLY, вы ограничиваете результат одной строкой. В нашем примере мы ограничиваем его пятью строками ( ВЫБРАТЬ ТОЛЬКО ПЕРВЫЕ 5 СТРОК, ).

Ниже у нас есть еще один запрос, который ограничивает количество строк до пяти, но начинается с пятой строки в таблице ( OFFSET 4 ROWS ):

Решение 2:
ВЫБЕРИТЕ название, цену
ИЗ игрушки
ЗАКАЗАТЬ ПО ЦЕНЕ
СМЕЩЕНИЕ 4 РЯДА ТОЛЬКО ДЛЯ СЛЕДУЮЩИХ 5 РЯДОВ;
 

Вот результат запроса:

наименование цена
Робот Тоби 185,50
Велосипед BMX 200.00

Обратите внимание, что этот запрос возвращает только две строки, а не указанные пять. Посмотрите на картинку:

Почему только две строки? Потому что эта таблица содержит всего шесть записей. Если мы опустим первые четыре строки и начнем со строки 5, останется только две строки.

SQL Server имеет другой способ ограничения строк: предложение TOP.

Решение 3:
ВЫБРАТЬ ТОП 3
 имя, цена
ИЗ игрушки
ЗАКАЗАТЬ ПО цене;
 

Вот результат запроса:

наименование цена
Easy Bricks 21.00
Рыбалка 25,00
Пазлы с животными 45,80

Если вам не нужно пропускать какие-либо строки, вы можете использовать предложение TOP SQL Server, чтобы ограничить количество возвращаемых строк. Ставится сразу после SELECT. За ключевым словом TOP следует целое число, указывающее количество возвращаемых строк. В нашем примере мы заказали по цене , а затем ограничили возвращаемые строки до 3.

В отличие от метода OFFSET — FETCH, TOP не требует ORDER BY.Вот аналогичный пример, но без сортировки записей:

Решение 4:
ВЫБРАТЬ ТОП 3
 имя, цена
ОТ игрушки;
 

Вот результат запроса:

Обратите внимание, что были возвращены разные записи. Обычно (но не всегда) строки отображаются в том порядке, в котором записи были вставлены в таблицу.

Мы рекомендуем использовать OFFSET и FETCH вместо TOP, поскольку OFFSET и FETCH являются стандартом SQL; TOP специфичен для T-SQL.

Характеристики максимальной емкости для SQL Server — SQL Server

Размер пакета 65 536 * (размер сетевого пакета) Размер сетевого пакета — это размер пакетов потока табличных данных (TDS), используемых для обмена данными между приложениями и реляционным ядром СУБД.Размер пакета по умолчанию составляет 4 КБ и контролируется параметром конфигурации размера сетевого пакета.
Длина в байтах строки, содержащей операторы Transact-SQL (размер пакета) 65 536 * (размер сетевого пакета) Размер сетевого пакета — это размер пакетов потока табличных данных (TDS), используемых для обмена данными между приложениями и реляционным ядром СУБД. Размер пакета по умолчанию составляет 4 КБ и контролируется параметром конфигурации размера сетевого пакета.
Байт на столбец короткой строки 8 000
Байт на ГРУППА ПО , ПО ЗАКАЗУ 8 060
Байт на ключ индекса 900 байт для кластерного индекса. 1700 для некластеризованного индекса. До SQL Server 2016 все версии поддерживали 900 байт для всех типов индексов. Максимальное количество байтов в ключе кластеризованного индекса не может превышать 900 в SQL Server.Для ключа некластеризованного индекса максимум составляет 1700 байт.

Вы можете определить ключ, используя столбцы переменной длины, максимальные размеры которых в сумме превышают установленный предел. Однако комбинированные размеры данных в этих столбцах никогда не могут превышать предел.

В некластеризованный индекс можно включать дополнительные неключевые столбцы, и они не учитываются при ограничении размера ключа. Неключевые столбцы могут помочь некоторым запросам работать лучше.

Байт на ключ индекса для таблиц, оптимизированных для памяти 2500 байт для некластеризованного индекса.Нет ограничений для хэш-индекса, если все ключи индекса помещаются в строку. В таблице, оптимизированной для памяти, некластеризованный индекс не может иметь ключевые столбцы, максимальный объявленный размер которых превышает 2500 байтов. Неважно, будут ли фактические данные в ключевых столбцах короче максимальных заявленных размеров.

Для ключа хеш-индекса нет жесткого ограничения на размер.

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

Для таблицы, оптимизированной для памяти, даже если размер строки составляет 8060 байт, некоторые столбцы переменной длины могут физически храниться вне этих 8060 байт. Однако максимальные объявленные размеры всех ключевых столбцов для всех индексов в таблице плюс любые дополнительные столбцы фиксированной длины в таблице должны уместиться в 8060 байтах.

Байт на внешний ключ 900
Байт на первичный ключ 900
Байт в строке 8 060 SQL Server поддерживает хранилище с переполнением строк, что позволяет перемещать столбцы переменной длины за пределы строк.Только 24-байтовый корень сохраняется в основной записи для столбцов переменной длины, вытесненных из строки. Эта функция допускает ограничение, которое фактически выше, чем в предыдущих выпусках SQL Server. Для получения дополнительной информации см. Поддержка больших строк.
Байт на строку в оптимизированных для памяти таблицах 8 060 Запуск SQL Server 2016 (13.x) таблицы, оптимизированные для памяти, поддерживают хранение вне строк. Столбцы переменной длины выталкиваются из ряда, если максимальные размеры всех столбцов в таблице превышают 8060 байт; это действие — решение времени компиляции.30-1
Кластерные индексы для таблицы 1
Столбцы в ГРУППА ПО , ПО ЗАКАЗУ Ограничено только количеством байтов
Столбцы или выражения в инструкции GROUP BY WITH CUBE или WITH ROLLUP 10
Столбцов на ключ индекса 32 Если таблица содержит один или несколько индексов XML, ключ кластеризации пользовательской таблицы ограничен 31 столбцом, поскольку столбец XML добавляется к ключу кластеризации первичного индекса XML.В SQL Server вы можете включать неключевые столбцы в некластеризованный индекс, чтобы избежать ограничения максимум 32 ключевыми столбцами. Для получения дополнительной информации см. Создание индексов с включенными столбцами.
Столбцы на внешний ключ или первичный ключ 32
Столбцы в заявлении INSERT 4 096
Столбцы в инструкции SELECT 4 096
Столбцов в таблице 1,024 Таблицы, содержащие разреженные наборы столбцов, включают до 30 000 столбцов.См. Редкие наборы столбцов.
Столбцы в заявлении UPDATE 4 096 К разреженным наборам столбцов применяются другие ограничения.
Количество столбцов на просмотр 1,024
Число подключений на одного клиента Максимальное значение настроенных подключений
Размер базы данных 524272 терабайт
Базы данных на экземпляр SQL Server 32 767
Файловые группы в базе данных 32 767
Файловые группы в базе данных для данных, оптимизированных для памяти 1
Файлов в базе данных 32 767
Размер файла (данных) 16 терабайт
Размер файла (журнал) 2 терабайта
Файлы данных для данных, оптимизированных для памяти, для каждой базы данных 4096 в SQL Server 2014 (12.Икс). Более поздние версии SQL Server не накладывают такого строгого ограничения.
Дельта-файл на файл данных для данных, оптимизированных для памяти 1
Ссылки на таблицы внешних ключей на таблицу Исходящий = 253. Входящий = 10 000. Об ограничениях см. Создание отношений по внешнему ключу.
Длина идентификатора (в символах) 128
Экземпляры на компьютер 50 экземпляров на автономном сервере.

25 экземпляров отказоустойчивого кластера при использовании общих дисков кластера в качестве хранилища.

50 экземпляров отказоустойчивого кластера с общими файловыми ресурсами SMB в качестве хранилища.

Индексы на таблицу, оптимизированную для памяти999, начиная с SQL Server 2017 (14.x) и в базе данных SQL Azure

8 в SQL Server 2014 (12.x) и SQL Server 2016 (13.x)

Замки на соединение Максимальное количество блокировок на сервер
Блокировок на экземпляр SQL Server Ограничено только памятью Это значение предназначено для распределения статической блокировки.Динамические блокировки ограничены только памятью.
Уровни вложенных хранимых процедур 32 Если хранимая процедура обращается к более чем 64 базам данных или более чем к двум базам данных при чередовании, вы получите сообщение об ошибке.
Вложенные подзапросы 32
Вложенные транзакции 4 294 967 296
Вложенные уровни триггеров 32
Некластеризованные индексы для таблицы 999
Количество различных выражений в предложении GROUP BY , когда присутствует любое из следующих: CUBE , ROLLUP , GROUPING SETS , WITH CUBE , WITH ROLLUP 32
Количество группирующих наборов, сгенерированных операторами в пункте GROUP BY 4 096
Параметров на хранимую процедуру 2 100
Параметры для каждой пользовательской функции 2 100
ССЫЛКИ на таблицу 253
Строк на столе Ограничено доступным хранилищем
Таблицы в базе данных Ограничено общим количеством объектов в базе данных Объекты включают таблицы, представления, хранимые процедуры, определяемые пользователем функции, триггеры, правила, значения по умолчанию и ограничения.Сумма количества всех объектов в базе данных не может превышать 2 147 483 647.
Разделы на многораздельную таблицу или индекс 15 000
Статистика по неиндексированным столбцам 30 000
Таблицы в инструкции SELECT Ограничено только доступными ресурсами
Триггеры на таблицу Ограничено количеством объектов в базе Объекты включают таблицы, представления, хранимые процедуры, определяемые пользователем функции, триггеры, правила, значения по умолчанию и ограничения.Сумма количества всех объектов в базе данных не может превышать 2 147 483 647.
Подключения пользователей 32 767
XML-индексы 249

Microsoft SQL Server Tutorial — Limit Result Set

Введение

По мере роста таблиц базы данных часто бывает полезно ограничить результаты запросов фиксированным числом или процентом.Это может быть достигнуто с помощью ключевого слова TOP SQL Server или предложения OFFSET FETCH .

Параметры

Параметр Подробности
TOP Ограничивающее ключевое слово. Используйте с номером.
PERCENT Процентное ключевое слово. Идет после TOP и предельного числа.

Если используется предложение ORDER BY , ограничение применяется к упорядоченному набору результатов.

Ограничение с помощью TOP

В этом примере результат SELECT ограничен 100 строками.

  ВЫБРАТЬ ТОП 100 *
FROM table_name;
  

Также можно использовать переменную для указания количества строк:

  ОБЪЯВИТЬ @CountDesiredRows int = 100;
ВЫБРАТЬ TOP (@CountDesiredRows) *
FROM table_name;
  

Ограничение на ПРОЦЕНТ

В этом примере результат SELECT ограничен 15 процентами от общего количества строк.

  ВЫБРАТЬ ТОП 15 ПРОЦЕНТОВ *
FROM table_name
  

Ограничение с помощью FETCH

SQL Server 2012

FETCH обычно более полезен для разбивки на страницы, но может использоваться как альтернатива TOP :

  ВЫБРАТЬ *
FROM table_name
ЗАКАЗАТЬ ПО 1
СМЕЩЕНИЕ 0 РЯД
ВЫБРАТЬ ТОЛЬКО СЛЕДУЮЩИЕ 50 РЯДОВ
  


Ограничение количества возвращаемых строк

Сводка : в этом руководстве вы узнаете, как использовать предложения SQL Server OFFSET FETCH для ограничения количества строк, возвращаемых запросом.

Предложения OFFSET и FETCH являются вариантами предложения ORDER BY . Они позволяют ограничить количество строк, возвращаемых запросом.

Ниже показан синтаксис предложений OFFSET и FETCH :

 

ORDER BY список_столбцов [ASC | DESC] OFFSET offset_row_count {ROW | ROWS} ПОЛУЧИТЬ {ПЕРВЫЙ | ДАЛЕЕ} fetch_row_count {ROW | ТОЛЬКО ROWS}

Язык кода: SQL (язык структурированных запросов) (sql)

В этом синтаксисе:

  • Предложение OFFSET указывает количество строк, которые нужно пропустить перед началом возврата строк из запроса. offset_row_count может быть константой, переменной или параметром, который больше или равен нулю.
  • Предложение FETCH определяет количество строк, возвращаемых после обработки предложения OFFSET . offset_row_count может быть константой, переменной или скаляром, который больше или равен единице.
  • Предложение OFFSET является обязательным, а предложение FETCH — необязательным. Кроме того, FIRST и NEXT являются синонимами соответственно, поэтому вы можете использовать их как синонимы.Точно так же вы можете использовать FIRST и NEXT как взаимозаменяемые.

Следующее иллюстрирует предложения OFFSET и FETCH :

Обратите внимание, что вы должны использовать предложения OFFSET и FETCH с предложением ORDER BY . В противном случае вы получите ошибку.

Предложения OFFSET и FETCH предпочтительнее для реализации решения с разбивкой по страницам, чем предложение TOP .

Предложения OFFSET и FETCH доступны с SQL Server 2012 (11.x) и более поздних версий и базы данных SQL Azure.

SQL Server

OFFSET и Примеры FETCH

Мы будем использовать таблицу products из образца базы данных для демонстрации.

Следующий запрос возвращает все продукты из таблицы products и сортирует продукты по их прейскурантным ценам и названиям:

 

SELECT наименование товара, список цен ИЗ производство.продукты СОРТИРОВАТЬ ПО список цен, наименование товара;

Язык кода: SQL (язык структурированных запросов) (sql)

Чтобы пропустить первые 10 продуктов и вернуть остальные, используйте предложение OFFSET , как показано в следующем операторе:

 

SELECT наименование товара, список цен ИЗ production.products СОРТИРОВАТЬ ПО список цен, наименование товара СМЕЩЕНИЕ 10 РЯДОВ;

Язык кода: SQL (язык структурированных запросов) (sql)

Чтобы пропустить первые 10 продуктов и выбрать следующие 10 продуктов, используйте предложения OFFSET и FETCH следующим образом:

 

SELECT наименование товара, список цен ИЗ производство.продукты СОРТИРОВАТЬ ПО список цен, наименование товара СМЕЩЕНИЕ 10 РЯДОВ ВЫБРАТЬ ТОЛЬКО СЛЕДУЮЩИЕ 10 РЯДОВ;

Язык кода: SQL (язык структурированных запросов) (sql)

Чтобы получить 10 самых дорогих продуктов, используйте предложения OFFSET и FETCH :

 

SELECT наименование товара, список цен ИЗ production.products СОРТИРОВАТЬ ПО list_price DESC, наименование товара СМЕЩЕНИЕ 0 РЯД ВЫБРАТЬ ТОЛЬКО ПЕРВЫЕ 10 РЯДОВ;

Язык кода: SQL (язык структурированных запросов) (sql)

В этом примере предложение ORDER BY сортирует продукты по их прейскурантным ценам в порядке убывания.Затем предложение OFFSET пропускает нулевую строку, а предложение FETCH выбирает первые 10 продуктов из списка.

В этом руководстве вы узнали, как использовать предложения SQL Server OFFSET FETCH , ограничивающие количество строк, возвращаемых запросом.

Использование ключевого слова ограничения SQL

30 июля, 2019 , Роберт Гравелл

Предложение SQL LIMIT ограничивает количество строк, возвращаемых оператором SELECT. Для баз данных Microsoft, таких как SQL Server или MSAccess, вы можете использовать оператор SELECT TOP для ограничения результатов, который является проприетарным эквивалентом оператора SELECT LIMIT от Microsoft.Однако для большинства реляционных баз данных (СУБД), включая MySQL / MariaDB, PostgreSQL и Oracle, предложение SQL LIMIT может решить несколько проблем. В сегодняшнем блоге мы рассмотрим некоторые из них, используя Navicat для PostgreSQL.

Во многих производственных и тестовых базах данных размеры таблиц обычно достигают миллионов строк и имеют десятки столбцов. По этой причине никогда не рекомендуется запускать запросы SELECT * к вашей базе данных. Сведение результатов к сотне или тысяче помогает уменьшить набор результатов до размера, который легче усваивается.

Инструменты разработки и администрирования

Navicat автоматически ограничивают наборы результатов по умолчанию, чтобы не перегружать сервер (-ы) баз данных. Вы можете увидеть это в действии, открыв стол. Внизу окна приложения отображается SQL, который Navicat выполнил для выборки строк таблицы. Он заканчивается «LIMIT 1000 OFFSET 0», что означает, что отображаются только первые 1000 записей.

Вы можете изменить количество записей по умолчанию для отображения или полностью отключить ограничение на экране «ЗАПИСИ»:

Как следует из названия, топ-N запросов — это те, которые пытаются найти максимальное количество записей из набора результатов.Это может быть 1-е, 3-е, 5-е, 10-е или первое [любое] число. Вот некоторые общие примеры:

  • Найдите 10 самых высокооплачиваемых сотрудников
  • Найдите 20 самых прибыльных клиентов
  • Найдите 3 самых популярных пользователей в системе

Эти запросы трудно выполнить, используя только предложения ORDER BY и WHERE, но не используя предложение LIMIT. Вот пример:

Топ-5 уникальных идентификаторов вакансий

Предположим, мы хотели найти первые уникальные идентификаторы вакансий в таблице.Вот такой запрос:

Ключевое слово DISTINCT обеспечивает удаление повторяющихся идентификаторов из результатов.

С помощью LIMIT можно найти строки, наиболее близкие к заданной дате. Вам просто нужно сравнить даты строк с заданной датой, упорядочить результаты и ограничить результаты количеством строк, которые вы хотите увидеть. Вот запрос, который возвращает строки, у которых creation_date больше, чем ‘2018-01-01’:

В данном случае наиболее поздней датой является 02.01.2018.

Следствием N верхних запросов являются N нижних запросов. Это запросы, которые пытаются найти наименьшее количество записей из набора результатов. Мы можем легко преобразовать наши популярные запросы в их нижние эквиваленты!

Последние 5 уникальных идентификаторов вакансий

Чтобы вернуть 5 нижних уникальных идентификаторов заданий, все, что вам нужно сделать, это удалить модификатор DESC в предложении ORDER BY. Это упорядочит записи в порядке возрастания (ASC), по умолчанию:

Также довольно легко найти ближайшие строки до заданной даты.Нам просто нужно изменить оператор больше ‘>’ на меньше ‘<' и изменить порядок результатов в порядке убывания (DESC):

В сегодняшнем блоге мы рассмотрели несколько вариантов использования предложения LIMIT с помощью Navicat для PostgreSQL. Хотите попробовать Navicat для PostgreSQL? Вы можете оценить его в течение 14 дней совершенно бесплатно!

Размер базы данных Ограничение размера для версий Microsoft SQL Server с 2000 по 2016 — Поддержка GFI

GFI LanGuard позволяет вам работать с Microsoft SQL Server в качестве серверной части базы данных.Иногда ваша база данных может расти и занимать много места на жестком диске сервера. В этой статье описаны действия по настройке ограничения базы данных для каждой версии SQL Server Express.

Примечание
  • Использование бесплатной экспресс-версии SQL Server может ограничить размер файлов базы данных. SQL Server Standard Edition имеет верхний предел в 524 петабайт, но это не бесплатно.
  • Если ваша база данных достигает предела вашей версии SQL Server Express, вы начнете испытывать ошибки из-за неспособности таблиц базы данных принимать новые данные.

Ниже приводится список версий SQL Server Express и их ограничения по размеру:

  • Microsoft SQL Server 2000 Desktop — 2 ГБ
  • Microsoft SQL Server 2005 Express edition имеет ограничение на размер базы данных до 4 ГБ
  • Microsoft SQL Server 2008 Express edition имеет ограничение на размер базы данных до 4 ГБ
  • Microsoft SQL Server 2008 R2 Express edition имеет ограничение на размер базы данных до 10 ГБ
  • Microsoft SQL Server 2012 Express edition имеет ограничение на размер базы данных до 10 ГБ
  • Microsoft SQL Server 2014 Express edition имеет ограничение на размер базы данных до 10 ГБ
  • Microsoft SQL Server 2016 Express edition имеет ограничение на размер базы данных до 10 ГБ

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

  1. Удалите старые сканы вручную или автоматически:
    1. Для удаления вручную
      1. Щелкните вкладку Configuration .
      2. Выберите Параметры обслуживания базы данных .
      3. Выберите Управление результатами сканирования.
      4. Удалите старые и ненужные отсканированные изображения.
    2. Для автоматического удаления:
      1. Щелкните вкладку Configuration .
      2. Опции обслуживания базы данных .
      3. Выберите Управление политикой хранения.
      4. Установите политику хранения, которая соответствует вашим потребностям.
  2. Очистите свою базу данных. Есть два варианта очистки базы данных.
    1. Вариант 1
      1. Перейдите в Конфигурация> Параметры обслуживания базы данных> Управление результатами сканирования… и удалите все сканирования.
      2. Перейдите в Конфигурация> Параметры обслуживания базы данных> Настройки базы данных … И укажите новый путь и имя для вашей новой базы данных.Новая база данных создается для вас автоматически. Дополнительные сведения см. В разделе «Создание новой базы данных SQL в GFI LanGuard».
    2. Вариант 2
      1. Перейти к конфигурации .
      2. Параметры обслуживания базы данных.
      3. Щелкните Настройки серверной части базы данных…
      4. Отключите GFI LanGuard от базы данных, для которой вы создали резервную копию и хотите удалить, подключившись к другой временной базе данных. Вы можете создать новую базу данных, выполнив Создание новой базы данных SQL в GFI LanGuard.
      5. Удалите базу данных с SQL Server с помощью SQL Server Management Studio.
      6. Перейдите в GFI LanGuard в разделе «Конфигурация »> «Параметры обслуживания базы данных»> «Настройки базы данных»… и повторно подключитесь к SQL Server.
Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *