Как я использую ROW_NUMBER ()?

Вы можете профилировать свое приложение с помощью node-tick .

  1. Установить node-tick с помощью sudo npm -g install tick
  2. Запустить приложение с включенным профилем node --prof ./app.js
  3. Через некоторое время при загрузке процессора 100% остановите приложение
  4. Вы можете увидеть v8.log в каталоге вашего приложения, теперь вы можете прочитать его с помощью node-tick-processor
  5. Запустить node-tick-processor и объяснить результаты

164
задан spender 5 September 2013 в 09:29
поделиться

4 ответа

Хотя я согласен с другими, что вы можете использовать count () для получения общего количества строк, вот как вы можете использовать row_count () :

  1. Чтобы получить общее количество строк:

     с темпом как (
     выберите row_number () поверх (порядок по идентификатору) как rownum
     из table_name 
    )
    выберите max (rownum) from temp 
  2. Чтобы получить номера строк, где имя Matt:

     с temp как (
     выберите имя, row_number () поверх (по идентификатору) как rownum
     из table_name
    )
    выберите rownum from temp, где назовите "Matt" 

. Вы также можете использовать min (rownum) или max (rownum) , чтобы получить первую или последнюю строку для Matt соответственно.

Это были очень простые реализации row_number () . Вы можете использовать его для более сложной группировки. Ознакомьтесь с моим ответом на Расширенная группировка без использования подзапроса

42
ответ дан 23 November 2019 в 21:14
поделиться

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

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

SELECT rows FROM sysindexes WHERE id = OBJECT_ID('table_name') AND indid < 2

Это значительно сократит время выполнения запроса.

24
ответ дан 23 November 2019 в 21:14
поделиться

На первый вопрос, почему не просто использовать?

SELECT COUNT(*) FROM myTable 

, чтобы получить счет.

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


Если вы вернули Row_Number () в основном запросе,

4
ответ дан 23 November 2019 в 21:14
поделиться

Для первого вопроса, почему бы просто не использовать?

SELECT COUNT(*) FROM myTable 

, чтобы получить счет.

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


Если вы вернули Row_Number () в своем основном запросе,

SELECT ROW_NUMBER() OVER (Order by Id) AS RowNumber, Field1, Field2, Field3
FROM User

Затем, когда вы хотите вернуться на 5 строк назад, вы можете взять текущий номер строки и использовать следующий запрос для определения строки с currentrow -5

SELECT us.Id
FROM (SELECT ROW_NUMBER() OVER (ORDER BY id) AS Row, Id
     FROM User ) us 
WHERE Row = CurrentRow - 5   
138
ответ дан 23 November 2019 в 21:14
поделиться
Другие вопросы по тегам:

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