PDA

View Full Version : بررسی یک دستور select



ARC
چهارشنبه 27 مهر 1390, 23:11 عصر
سلام
من یک جدول دارم که حداقل 2 میلیون رکورد داره و باید این رکورد هارو در یک Grid View به کابر نمایش بدم و علاوه بر این تعداد کاربر های سیستم هم خیلی بالاست چیزی که هست میخوام 20 تا 20 تا برای هر صفحه select رو انجام بدم دستور رو به شکل زیر نوشتم.
ولی یک سوال دستور من اول یک select کلی انجام میده و بعد با توجه به صفحه درخواستی 20 تا از رکورد های اون select اولی رو select میکنه میخواستم بودنم با این کار فشار به دیتابیس زیاده ؟ روش بهتری کسی داره ؟
ممنون میشم راهنمایی کنید.


select top 20 * from
(

select *, ROW_NUMBER() OVER(ORDER BY ID ASC) AS 'RowNum' from Table1

) as MyTable

where
RowNum > (@page * 20)

یوسف زالی
پنج شنبه 28 مهر 1390, 22:50 عصر
سلام.
یکی از راهها می تونه استفاده از where باشه. شما اگر فیلدی داشته باشی که identity اون true باشه، مثل ID ، اونوقت آخرین Identity سلکت آخر رو به عنوان پارامتر پاس می دی.
select top 20 * from tbl where ID > @LastRowID

ARC
جمعه 29 مهر 1390, 11:31 صبح
سلام.
یکی از راهها می تونه استفاده از where باشه. شما اگر فیلدی داشته باشی که identity اون true باشه، مثل ID ، اونوقت آخرین Identity سلکت آخر رو به عنوان پارامتر پاس می دی.
select top 20 * from tbl where ID > @LastRowID

ممنون از جواب شما ولی روش که فرمودید روش دقیقی نیست و زمانی میتونه درت عمل کنه که کاربر فقط اجازه داشته باشه 1 صفحه 1 صفحه جلو یا عقب بره و مثلا اگر بخواد صفحه 10 را ببینه نمیتونه.
من توی mysql دیدم به این شکل عمل میکنن

Select * From Table Limit 20,10


ولی این کد در MSSQL کار نمیکنه یه معادل پیدا کردم که به شکل زیر بود ولی مثل اینکه فقط روی MSSQL CTP3 فقط کار میکنه. کسی معادلی برای اون دستور mysql نداره؟

SELECT

DepartmentID, Name, GroupName

FROM

HumanResources.Department

ORDER

BY DepartmentID

OFFSET 0
ROWS


FETCH NEXT 10 ROWS ONLY;


این نسخه CTP3 چیه؟

mohsen.net
چهارشنبه 04 آبان 1390, 13:43 عصر
CTP3 نسخه جدید SQL SERVER است .ورژن 2011
در نسخه جدید صفحه بندی به صورت پیش فرض وجود دارد. اما برای نسخه های 2008 به قبل باید این کار رو خودتون انجام بدید.
بهترین راه اینه که یک ستون جدیداز نوع identity به جدول خودتون اضافه کنید و نتیجه را در یک temptable بریزی و هر بار که شماره صفحه خواست بر اساس فیلد identity که جدید ساختی داده ها را بارگزاری کن
مزیت این روش نسبت به select خودت اینه که هر بار که کاربر درخواست یک صفحه جدید می کنه کل جدول orderby نمی شه

یوسف زالی
چهارشنبه 04 آبان 1390, 22:35 عصر
دوست من هزینه order کمتر از insert نیست؟

mohsen.net
یک شنبه 08 آبان 1390, 10:42 صبح
من روی 35 میلیون تست کردم مشکلی نبود
مضافا بر اینکه insert یکبار انجام می شود اما در روش قبلی هربار باید کل داده order بشه