الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

معرفة عدد السجلات في كل جدول بدون عمل مسح ك

مغلق
بدأه IUnknown في 18 مايو 2006 · 2 رد · 939 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

احيانا ما نوجه مشكلة وهي الرغبة في معرفة أي الجداول به اكبر عدد من السجلات ( لمعرفة سبب زياده حجم قاعدة البيانات مثلا) وبدلا من تشغيل

select count (*) from Tablename

مرة لكل جدول فضلا عن انها بطيئة نوعا ما للجداول التي بها ملايين السجلات هناك system stored procedure يسترجع عدد السجلات في اي جدول في لا وقت ( عند عدم وجود شرط)

الكود التالي يسترجع السجلات من كل الجداول

SET NOCOUNT ON
Declare @TableName sysname
Create Table #Tables(
ID Int Identity,
TableName sysname null,
NoOfRows BigInt,
DataSpace Bigint,
IDXSpace BigInt)
declare c cursor for
Select Name from Sysobjects where xtype ='u' -- User tables Only
open c
fetch Next from c into @TableName
while @@Fetch_Status =0
begin
 Insert #Tables(NoOfRows,DataSpace,IDXSpace) Exec sp_msTableSpace @TableName
	Update #Tables Set TableName = @TableName Where ID = @@Identity
	fetch Next from c into @TableName
end
close c
deallocate c
select * from #Tables Order By NoOfRows DESC
drop table #Tables
SET NOCOUNT OFF

When all else fails, read the instructions.

If there is a possibility of several things going wrong the one that will cause the most damage will be the one to go wrong.

No Matter how many times you repeat, there will be someone not listening .

To beat the bureaucracy, make your problem their problem

55926083.png

#2

شكرا على مشاركاتك الفعالة، وكده الأعضاء ولا بلاش :P

لكن هل تعتقد أن الكود الذي كتبته أسرع من جملة SQL الأولى؟ خصوصا وأن جملة SQL لاتتطلب سوى table scan بينما الكود يحتوي على عمليات إنشاء جدول وإدخال بيانات إليه وتشغيل cursor وtable scan في الآخر.

على كل سأحاول قياس سرعة كل منهما.

طريقة أخرى:

stored procedure بداخله استعلام على جداول النظام لاسترجاع أسماء user tables ومن ثم تنفيذ الجملة

select count (*) from Tablename

على كل جدول.

فكر بطريقة أخرى

#3
walmhomer كتب:
شكرا على مشاركاتك الفعالة، وكده الأعضاء ولا بلاش :P

لكن هل تعتقد أن الكود الذي كتبته أسرع من جملة SQL الأولى؟ خصوصا وأن جملة SQL لاتتطلب سوى table scan بينما الكود يحتوي على عمليات إنشاء جدول وإدخال بيانات إليه وتشغيل cursor وtable scan في الآخر.

على كل سأحاول قياس سرعة كل منهما.

طريقة أخرى:

stored procedure بداخله استعلام على جداول النظام لاسترجاع أسماء user tables ومن ثم تنفيذ الجملة

select count (*) from Tablename

على كل جدول.

شكرا على ردك

في مقارنه السرعة ارجو ان تكون على كل الجداول :D وهذا ما يفعله الكود المرفق :rolleyes: على جدول واحد يمكنك تجربة sp_msTableSpace TableName

بالطبع التجربة ستكون غير مجدية على الجداول الصغيرة

When all else fails, read the instructions.

If there is a possibility of several things going wrong the one that will cause the most damage will be the one to go wrong.

No Matter how many times you repeat, there will be someone not listening .

To beat the bureaucracy, make your problem their problem

55926083.png

هذا الموضوع مغلق.

مواضيع مشابهة