Для таблиц с большими и большими столбцами данных я предпочитаю:
SELECT
tablename.col1,
tablename.col2,
tablename.col3,
...
FROM
(
(
SELECT
col1
FROM
(
SELECT col1, ROW_NUMBER() OVER (ORDER BY col1 ASC) AS RowNum
FROM tablename
WHERE ([CONDITION])
)
AS T1 WHERE T1.RowNum BETWEEN [OFFSET] AND [OFFSET + LIMIT]
)
AS T2 INNER JOIN tablename ON T2.col1=tablename.col1
);
-
[CONDITION] can contain any WHERE clause for searching.
[OFFSET] specifies the start,
[LIMIT] the maximum results.
Он имеет гораздо лучшую производительность для таблиц с большими данными, таких как BLOB, потому что функция ROW_NUMBER должна просматривать только один столбец, и только совпадающие строки возвращаются со всеми столбцами.