Способы подсчета количества записей в каждой из таблиц базы данных. Количество записей в таблице ms sql


Как узнать количество записей в SQL-выборке

Вы здесь: Главная - MySQL - SQL - Как узнать количество записей в SQL-выборке

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

На самом деле всё очень просто, и нам нужна всего лишь функция COUNT():

SELECT COUNT(*) FROM `table` WHERE `field_1`='value_1'

После выполнения данного запроса будет возвращён result_set, в котором будет храниться массив, содержащий элемент COUNT(*) со значением количества записей в таблице "table", где поле "field_1" имеет значение "value_1".

Другой пример. Допустим, надо узнать просто количество записей. Тогда то же самое, но без WHERE:

SELECT COUNT(*) FROM `table`

И давайте, напоследок, подкину ещё один пример. Допустим, Вам необходимо подсчитать количество уникальных записей в таблице:

SELECT COUNT(DISTINCT `field_1`) FROM `table`

Вот такой нехитрой функцией COUNT() можно легко узнавать количество записей в SQL-выборке, не извлекая при этом сами записи и экономя ресурсы.

Полный курс по PHP и MySQL: http://srs.myrusakov.ru/php

  • Создано 12.03.2012 12:53:32
  • Михаил Русаков
Предыдущая статья Следующая статья

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка: <a href="https://myrusakov.ru" target="_blank"><img src="https://myrusakov.ru//images/button.gif" alt="Как создать свой сайт" /></a>

    Она выглядит вот так:

  2. Текстовая ссылка:<a href="https://myrusakov.ru" target="_blank">Как создать свой сайт</a>

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи): [URL="https://myrusakov.ru"]Как создать свой сайт[/URL]

myrusakov.ru

Способы подсчета количества записей в каждой из таблиц базы данных | MS SQL Server | Статьи | Программирование Realcoding.Net

В этой статье рассматриваются несколько способов, с помощью которых можно подсчитать количество записей в таблицах базы данных MS SQL Server.

Способ 1: Поскольку приведенный ниже sql-код для подсчета количества записей использует таблицу sysindexes, его результат зависит от того, была ли обновлена статистика.

T-SQL:

select substring(o.name, 1, 30) Table_Name ,i.rows Number_of_Rowsfrom sysobjects oinner join sysindexes ion (o.id = i.id)where o.xtype = 'u'and i.indid < 2order by o.name

В приведенном примере xtype = 'u' используется для выбора объектов типа "таблица", а использование indid < 2 гарантирует выборку всех таблиц (как имеющих, так и не имеющих индексы).

Способ 2: Следующий sql-код также может быть использован для определения количества записей в таблицах базы данных. Для подсчета числа строк этот sql-код использует функцию агрегации. Обрамление кавычками выбранного названия таблицы необходимо для обработки пробелов в названии (если такие названия существуют).

T-SQL:

SET NOCOUNT ON   DECLARE tables_cursor CURSOR      FOR      SELECT name FROM sysobjects WHERE type = 'U' order by 1   OPEN tables_cursor   DECLARE @tablename varchar(50)

   FETCH NEXT FROM tables_cursor INTO @tablename

   WHILE (@@fetch_status <> -1)   BEGIN   select @tablename = quotename(@tablename, '[]')      DECLARE @CMD VARCHAR(100)      PRINT @TABLENAME      SELECT @CMD = ' select count(*) from '+@tablename+' '   EXEC (@CMD)

      FETCH NEXT FROM tables_cursor INTO @tablename   END   DEALLOCATE tables_cursor   SET NOCOUNT OFF

Способ 3: Для решения поставленной задачи можно также использовать недокументированную хранимую процедуру sp_Msforeachtable. Sp_Msforeachtable сканирует все таблицы в определенной базе данных и выполняет указанную sql-команду (ы) для каждой из таблиц. Для подстановки имени таблицы используется символ "?".

T-SQL:

sp_msforeachtable @command1= 'print ''?''', @command2 = "select count(*) from ?"

www.realcoding.net

Количество строк во всех таблицах (T-SQL)

Иногда полезно для реверс инижинеринга

declare @tmp table (name varchar(50), rcount int) declare @sTblName varchar(50) declare @nRowCount int -- the rows declare @nObjectID int -- Object ID declare iter cursor for select TABLE_NAME from information_schema.tables open iter fetch next from iter into @sTblName while (@@FETCH_STATUS = 0) begin set @nObjectID = OBJECT_ID(@sTblName) if @nObjectID is not null begin select TOP 1 @nRowCount = rows from sysindexes where id = @nObjectID AND indid < 2 insert into @tmp values (@sTblName, @nRowCount) end fetch next from iter into @sTblName end close iter deallocate iter select * from @tmp order by rcount desc

UPD:Если есть таблицы не в dbo схеме

declare @tmp table (name varchar(60), rcount int) declare @tblName varchar(50) declare @schema varchar(10) declare @nRowCount int -- the rows declare @nObjectID int -- Object ID declare iter cursor for select TABLE_NAME, TABLE_SCHEMA from information_schema.tables open iter fetch next from iter into @tblName, @schema while (@@FETCH_STATUS = 0) begin set @nObjectID = OBJECT_ID(@schema+'.'+@tblName) if @nObjectID is not null begin select TOP 1 @nRowCount = rows from sysindexes where id = @nObjectID AND indid < 2 insert into @tmp values (@tblName, @nRowCount) end fetch next from iter into @tblName, @schema end close iter deallocate iter

UPD2:И индексы перебилдить все скопом (в тырнете нашёл)

DECLARE @TableName VARCHAR(255) DECLARE @sql NVARCHAR(500) DECLARE @fillfactor INT SET @fillfactor = 80 DECLARE TableCursor CURSOR FOR SELECT OBJECT_SCHEMA_NAME([object_id])+'.'+name AS TableName FROM sys.tables OPEN TableCursor FETCH NEXT FROM TableCursor INTO @TableName WHILE @@FETCH_STATUS = 0 BEGIN SET @sql = 'ALTER INDEX ALL ON ' + @TableName + ' REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillfactor) + ')' EXEC (@sql) FETCH NEXT FROM TableCursor INTO @TableName END CLOSE TableCursor deallocate TableCursor

Понравилось это:

Нравится Загрузка...

Похожее

alexeysuvorov.com

sql-server - SQL Server: максимальное количество строк в таблице

У меня есть таблица с тремя столбцами с чуть более 6 миллиардами строк в SQL Server 2008 R2.

Мы запрашиваем его каждый день, чтобы создавать графические диаграммы системного анализа для наших клиентов. Я не заметил ни одной производительности производительности базы данных (хотя тот факт, что она растет ~ 1 Гбайт каждый день, делает управление резервными копиями более активным, чем хотелось бы).

Обновление Июль 2016

Мы сделали это до ~ 24,5 миллиардов строк, пока резервные копии не стали достаточно большими, чтобы мы могли урезать записи старше двух лет (~ 700 ГБ, хранящиеся в нескольких резервных копиях, в том числе на дорогих лентах). Стоит отметить, что производительность не была существенным стимулом в этом решении (т.е. Все еще работала отлично).

Для тех, кто пытается удалить 20 миллиардов строк из SQL Server, я настоятельно рекомендую эту статью. Соответствующий код в случае, если ссылка замирает (прочитайте статью для полного объяснения):

ALTER DATABASE DeleteRecord SET RECOVERY SIMPLE; GO BEGIN TRY BEGIN TRANSACTION -- Bulk logged SELECT * INTO dbo.bigtable_intermediate FROM dbo.bigtable WHERE Id % 2 = 0; -- minimal logged because DDL-Operation TRUNCATE TABLE dbo.bigtable; -- Bulk logged because target table is exclusivly locked! SET IDENTITY_INSERT dbo.bigTable ON; INSERT INTO dbo.bigtable WITH (TABLOCK) (Id, c1, c2, c3) SELECT Id, c1, c2, c3 FROM dbo.bigtable_intermediate ORDER BY Id; SET IDENTITY_INSERT dbo.bigtable OFF; COMMIT END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK END CATCH ALTER DATABASE DeleteRecord SET RECOVERY FULL; GO

Обновление ноября 2016 года

Если вы планируете хранить эти данные в одной таблице, не делайте этого. Я настоятельно рекомендую вам рассмотреть разбиение таблиц (либо вручную, либо со встроенными функциями, если вы используете Enterprise edition). Это уменьшает старые данные так же просто, как обрезание таблицы один раз (неделя/месяц/и т.д.). Если у вас нет Enterprise (чего у нас нет), вы можете просто написать script, который выполняется один раз в месяц, отбрасывает таблицы старше 2 лет, создает таблицу следующего месяца и восстанавливает динамическое представление, которое объединяет все таблицы разделов для упрощения запросов. Очевидно, что "раз в месяц" и "старше 2 лет" должен быть определен вами на основе того, что имеет смысл для вашего случая использования. Удаление непосредственно из таблицы с десятками миллиардов строк данных будет: a) взять ОГРОМНОЕ количество времени и б) заполнить журнал транзакций в сотни или тысячи раз.

qaru.site

Реактивный подсчет количества строк в таблице

Одной из самых что ни есть рядовых и часто встречающихся задач является подсчет количества строк в таблице. MS SQL Server предоставляет стандартное решение для такой задачи - старый добрый COUNT. Да, для таблиц с небольшим количеством записей использование COUNT как говорится - то, что доктор прописал. Однако если записей миллион или с десяток миллионов или еще больше? Посмотрим каковы будут результаты. Для наглядности будем использовать для теста таблицу (назовем ее Ads) с количеством записей, например, больше 10 миллионов. Итак, приступим - первый стандартный вариант с использованием COUNT:
  1. select count(*) from Ads
* This source code was highlighted with Source Code Highlighter. Взглянем на результаты:

- статистика:SQL Server Execution Times:CPU time = 1076 ms, elapsed time = 1174 ms.

- данные из плана выполнения:

То что мы видим не сильно впечатляет. Если выполнить предыдущий код с распараллеливанием - результаты конечно будут в разы лучше:

- статистика:SQL Server Execution Times:CPU time = 1997 ms, elapsed time = 149 ms.

- данные из плана выполнения:

но ведь можно еще быстрее! Для этого нам потребуется представление sys.dm_db_partition_stats. Собственно код:
  1. select sum(ps.row_count)
  2. from sys.dm_db_partition_stats ps
  3. where ps.object_id = object_id(N'Ads')
  4. and ps.index_id<2
* This source code was highlighted with Source Code Highlighter. Результаты:

- статистика:SQL Server Execution Times:CPU time = 0 ms, elapsed time = 38 ms.

- данные из плана выполнения:

Результат превзошел все ожидания! Теперь мы можем быстро считать количество записей в любой таблице!

Полезные ссылки:- подробнее о представлении sys.dm_db_partition_stats можно почитать тут

maximus-sql-notes.blogspot.com

Как узнать количество строк в таблице MySQL

26 октября 2011  /  MySQL, PHP

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

Способ 1. phpMyAdmin

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

Тогда заходим в phpMyAdmin (localhost/tools/phpmyadmin — для Денвера), затем выбираем нужную базу данных, после этого выбираем таблицу, количество строк в которой нужно выяснить, и видим следующее сообщение:

Способ 2. COUNT

Вот так выглядит сам SQL-запрос:

SELECT COUNT(1) FROM название_таблицы

SQL-запрос с условием:

SELECT COUNT(1) FROM название_таблицы WHERE условие

Реализация на PHP:

$a = mysql_query("SELECT COUNT(1) FROM название_таблицы"); $b = mysql_fetch_array( $a ); echo $b[0]; // выведет число строк

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

Способ 3. mysql_num_rows

Этот способ позволяет подсчитать количество строк результата запроса.

Например в WordPress посты хранятся в таблице wp_posts, таким образом мы можем узнать количество всех постов. Этот код дан только для примера (или для случаев, когда среда WordPress не подгружена), так как в WordPress подключение к базе данных осуществляется через класс $wpdb.

/* * для начала подключимся к базе данных * возможно вы уже подключились к ней ранее * пользователь root и пустой пароль - настройки по умолчанию для Денвера */ $connect_db = mysql_connect("localhost", "root", "");   /* * выбираем базу данных, нужно указать её название */ mysql_select_db("truemisha_database", $connect_db);   /* * SQL запрос * у меня в качестве названия таблицы указана таблица с записями WordPress */ $posts = mysql_query("SELECT * FROM wp_posts", $connect_db);   /* * задействуем функцию mysql_num_rows() */ $num_rows = mysql_num_rows( $posts );   echo "Количество записей на вашем блоге WordPress: $num_rows \n";

В результат будут включены абсолютно все записи. А как узнать количество только тех, которые опубликованы? Для этого нам потребуется немного изменить SQL-запрос.

17 $posts = mysql_query("SELECT * FROM wp_posts WHERE post_status='publish'", $connect_db);

Миша Рудрастых

Впервые познакомился с WordPress в 2009 году. С 2014 года меня можно встретить на WordCamp — официальной конфе по WordPress, иногда там выступаю. Также в настоящее время веду курсы по WordPress в Epic Skills.

Если вам нужна помощь с вашим сайтом или разработка с нуля, то могу порекомендовать хороших ребят. Просто напишите мне.

misha.blog

Способы подсчета количества записей в каждой из таблиц базы данных | MS SQL Server | Статьи | Программирование Realcoding.Net

В этой статье рассматриваются несколько способов, с помощью которых можно подсчитать количество записей в таблицах базы данных MS SQL Server.

Способ 1: Поскольку приведенный ниже sql-код для подсчета количества записей использует таблицу sysindexes, его результат зависит от того, была ли обновлена статистика.

T-SQL:

select substring(o.name, 1, 30) Table_Name ,i.rows Number_of_Rowsfrom sysobjects oinner join sysindexes ion (o.id = i.id)where o.xtype = 'u'and i.indid < 2order by o.name

В приведенном примере xtype = 'u' используется для выбора объектов типа "таблица", а использование indid < 2 гарантирует выборку всех таблиц (как имеющих, так и не имеющих индексы).

Способ 2: Следующий sql-код также может быть использован для определения количества записей в таблицах базы данных. Для подсчета числа строк этот sql-код использует функцию агрегации. Обрамление кавычками выбранного названия таблицы необходимо для обработки пробелов в названии (если такие названия существуют).

T-SQL:

SET NOCOUNT ON   DECLARE tables_cursor CURSOR      FOR      SELECT name FROM sysobjects WHERE type = 'U' order by 1   OPEN tables_cursor   DECLARE @tablename varchar(50)

   FETCH NEXT FROM tables_cursor INTO @tablename

   WHILE (@@fetch_status <> -1)   BEGIN   select @tablename = quotename(@tablename, '[]')      DECLARE @CMD VARCHAR(100)      PRINT @TABLENAME      SELECT @CMD = ' select count(*) from '+@tablename+' '   EXEC (@CMD)

      FETCH NEXT FROM tables_cursor INTO @tablename   END   DEALLOCATE tables_cursor   SET NOCOUNT OFF

Способ 3: Для решения поставленной задачи можно также использовать недокументированную хранимую процедуру sp_Msforeachtable. Sp_Msforeachtable сканирует все таблицы в определенной базе данных и выполняет указанную sql-команду (ы) для каждой из таблиц. Для подстановки имени таблицы используется символ "?".

T-SQL:

sp_msforeachtable @command1= 'print ''?''', @command2 = "select count(*) from ?"

www.realcoding.net