Fetch No oF Строки, которые могут быть возвращены запросом выбора - PullRequest
0 голосов
/ 01 октября 2018

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

resultset.last() and getRow()
select count(*) from(query) myNewTable;

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

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Нет простого способа сделать это.

1. Как вы узнали, обычно это сводится к выполнению 2 запросов:

Выполнение SELECT с ограничением и смещением для извлечения данных, которые выneed.

Выполнение COUNT(*) для подсчета общего количества страниц.

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

2. Если ваша таблица большая, но данные, которые вам нужно отобразить, представляют меньшиепроцент данных из таблиц и , данные разделяют общую черту (например, данные на всех ваших страницах создаются за один день), которые вы можете использовать разбиение .Выполнение COUNT и SELECT на одном разделе будет намного быстрее, чем выполнение их на всей таблице.

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

id | user_id | timestamp_column | text_column | another_text_column

Теперь ваш запрос SELECT выглядит следующим образом:

SELECT * FROM big_table WHERE user_id = 4 ORDER BY timestamp_column LIMIT 20 OFFSET 20;

И вашзапрос на подсчет:

SELECT COUNT(*) FROM table WHERE user_id = 4;

Вы можете создать count_table , который будет иметь следующий формат:

user_id | count

Как только вы заполните эту таблицу текущими данными вСистема, вы создадите триггер, который будет обновлять эту таблицу при каждой вставке или обновлении big_table .

Таким образом, запрос подсчета будет очень быстрым, потому что он будет выполняться на count_table , например:

SELECT count FROM count_table WHERE user_id = 4

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

Это подходы, которые вы можете попробовать, но в конечном итоге все зависит от размера и типа ваших данных.

0 голосов
/ 01 октября 2018

Мы можем получить ограниченные записи, используя следующий код,

Во-первых, нам нужно установить, сколько записей мы хотим, как показано ниже,

var limit = 10;

После того, как это отправило это ограничение нижеоператор

WITH
    Temp AS(
        SELECT
            ROW_NUMBER() OVER( primayKey DESC ) AS RowNumber,
            *
        FROM
            myNewTable
    ),
    Temp2 AS(
        SELECT COUNT(*) AS TotalCount FROM Temp
    )
SELECT TOP limit * FROM Temp, Temp2 WHERE RowNumber > :offset order by RowNumber

Это выполняется как в MSSQL, так и в MySQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...