1. 求快速統計sql Server 某個庫里所有表的方法,count() 函數很慢的。
我們都知道用聚合函數count()可以統計表的行數。如果需要統計資料庫每個表各自的行數(DBA可能有這種需求),用count()函數就必須為每個表生成一個動態SQL語句並執行,才能得到結果。以前在互聯網上看到有一種很好的解決方法,忘記出處了,寫下來分享一下。
該方法利用了sysindexes 系統表提供的rows欄位。rows欄位記錄了索引的數據級的行數。解決方法的代碼如下:
select schema_name(t.schema_id) as [Schema], t.name as TableName,i.rows as [RowCount]
from sys.tables as t, sysindexes as i
where t.object_id = i.id and i.indid <=1
該方法連接了sys.tables視圖,從中找出表名和schema_id,再通過schema_name函數獲取表的架構名。篩選條件i.indid <=1 只選聚集索引或者堆,每個表至少有一個堆或者聚集索引,從而保證為每個表返回一行。以下是在我的AdventureWorks資料庫中運行該查詢返回的部分結果:
Schema TableName RowCount
——————– ——————– ———–
Sales Store 701
Proction ProctPhoto 101
Proction ProctProctPhoto 504
Sales StoreContact 753
Person Address 19614
Proction ProctReview 4
Proction TransactionHistory 113443
Person AddressType 6
該方法的優點有:
1.運行速度非常快。
2.由於不訪問用戶表,不會在用戶表上放置鎖,不會影響用戶表的性能。
3.可以將該查詢寫成子查詢、CTE或者視圖,與其它查詢結合使用。
望採納
2. 如何知道資料庫中每個表有多少行
select a.name,b.rows from sysobjects a
inner join sysindexes b on a.id=b.id
where a.type='u' and b.indid in (0,1)
3. 如何用SQL語句求oracle 資料庫所有表的行數
可以從表user_tables中查詢。
select
sum(num_rows)
from
user_tables
;
就是顯示用戶所有表的行數其中num_rows是每個表的行數,用sum加總一下,就是當前用戶所有表的總行數。
但因為user_tables中的數據不是實時統計,會有時間差,所以以上Sql統計得到的結果與實際會存在一定誤差。
4. 如何在SQL查詢分析器里運行查找其中一個資料庫內的所有表的行數
我的答案你還不能得到結果嗎?我在SQL SERVER 2000下面測試通過,取到的結果都是正確的
剛剛想了一下,如果你要查行數的話,用這個SQL
drop table #T
CREATE TABLE #T ([name] nvarchar(255),rows bigint)
DECLARE @Name nvarchar(255),@Sql nvarchar(4000)
DECLARE TName CURSOR FOR
SELECT [name] FROM sysobjects WHERE xtype = 'U'
OPEN TName
FETCH NEXT FROM TName
INTO @Name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Sql='INSERT INTO #T ([name],rows) SELECT '''+@name+''' AS name, COUNT(1) AS row FROM '+@name
EXEC(@Sql)
FETCH NEXT FROM TName INTO @name
END
CLOSE TName
DEALLOCATE TName
SELECT * FROM #T
5. 如何快捷地查詢SQL SERVER中每個用戶表的表名和行數
執行一下就可以了
CREATE TABLE #T ([name] nvarchar(255),rows bigint)
DECLARE @Name nvarchar(255),@Sql nvarchar(4000)
DECLARE TName CURSOR FOR
SELECT [name] FROM sysobjects WHERE xtype = 'U'
OPEN TName
FETCH NEXT FROM TName
INTO @Name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Sql='INSERT INTO #T ([name],rows) SELECT '''+@name+''' AS name, COUNT(1) AS row FROM '+@name
EXEC(@Sql)
FETCH NEXT FROM TName INTO @name
END
CLOSE TName
DEALLOCATE TName
SELECT * FROM #T
6. MS SQL 如何查看一個資料庫中所有表的行數
[摘要]本文介紹通過查詢系統表sysobjects和sysindexes實現MS SQL 查看一個資料庫中所有表的行數,並提供簡單的示例代碼供參考。
7. sql 查詢某個庫中的每個表的記錄行數
select d.name as 表名,COUNT (*)as 記錄 from syscolumns a inner join sysobjects d on a.id = d.id and d.xtype = 'U'
group by d.name
這是sqlserver 實現的,不知道符不符合。不過剛剛驗證了一下,不是很對,估計是主鍵的原因,修改好了再看看
以上語句只能測試出部分,這個存儲過程可以實現全部,sqlserver直接執行即可:
create table #temp(Recordcount int ,tableName varchar(30))
declare @tablename varchar(30)
declare @sql varchar(100)
declare @str varchar(30)
declare tablecursor cursor for
select name from sysobjects where xtype='u'
open tablecursor
fetch next from tablecursor into @tablename
while @@fetch_status=0
begin
set @str=@tablename
set @sql='insert into #temp(recordcount,tablename) select count(*),'+''''+@tablename+''''+' from '+@tablename
exec(@sql)
fetch next from tablecursor into @tablename
end
close tablecursor
deallocate tablecursor
select * from #temp drop table #temp
8. SQL server中的表, 最大行數和列數分別是多少
在SQL
server2000中,一個資料庫中最多可以創建20億個表,每個表最多可以定義1024個列(欄位),每行最多可以存儲8060位元組,表的行數及總大小僅受可用存儲空間的限制。
9. 如何sql語句查詢出資料庫每個表的幾條數據
---方法1:
selectcount(1)from[表名]
---方法2:
selectschema_name(t.schema_id)as[Schema],t.nameas[表名],i.rowsas[總行數]
fromsys.tablesast,sysindexesasi
wheret.object_id=i.idandi.indid<=1
請試一試,如有疑問,及時溝通!