18-06-13, 03:59 AM
السلام عليكم ورحمة الله
كنت قد قرات موضوع استاذى ابو ايهاب الخاص بعمل pageing للداتا جريد فيو وحملت المثال وشوفته ومثال رائع ولهذا رايت ان اضيف جزء مكمل لموضوع استاذى ابو ايهاب
مثال اخى ابو ايهاب يقوم على ارجاع جميع بيانات الجدول من قاعدة البيانات ووضعها في داتا سيت او داتا تيبل ثم بعدها يتم عمل pageing من الداتا تيبل الموجود والذى تم ملأه بكل البيانات
ولكن ماذا لو كان الجدول فيه الاف او ملايين السجلات وتم ارجاع كل هذه السجلات ووضعها في الداتا سيت او الداتا تيبل
طبعا عملية بطيئة ومرهقة ولن يكون وقتها هناك اى قيمة لعملية ال pageing
انا على سبيل المثال صممت جدول به ثلاث حقول ببيانات نصية وعملت ملأ لهذا الجدول حتى اصبح عدد سجلاته مليون وسبعمائة الف
وعندما عملت جملة استعلام بسيطة لارجاع جميع البيانات مثل الجملة الاتية والتى يعرفها اكيد كل المبرمجين
select * from table
كان متوسط زمن التنفيذ 14 ثانية مع العلم ان امكانيات جهازى عاليه جدا جدا
تخيل مثلا لو برنامجك على جهاز متوسط او على شبكة ضعيفة
سيكون البطء هو شعار البرنامج
ولهذا اعتقد ان الافضل عمل pageing من خلال جملة الاستعلام نفسها وذلك كالاتى
مثلا الجدول به الف سجل وانا اريد عرض عشر سجلات في الداتا جريد فيو في كل صفحة
مثلا عند ارجاع العشر سجلات الاولى تكون الجملة كالاتى
select top 10 * from table
هذه الجملة تقوم بارجاع فقط العشر سجلات الاولى
حسنا
على سبيل المثال اريد ارجاع العشر سجلات من السجل رقم 900 الى السجل رقم 910
وهى اساس عملية ال pageing التى تقوم على تقسيم البيانات على الصفحة في الداتا جريد فيو
اذن كيف سيكون شكل جملة الاستعلام
ستكون كالاتى
هذه العملية لن تستغرق على اسوأ الظروف اكثر من ثانية واحدة او ثانيتين في حالة كان الجهاز ضعيف جدا
هل الفرق واضح بين زمنى التنفيذ
حتى لو كان الجدول به مليون سجل او اكثر ونفذت نفس الطريقة
مثلا
select top 10 * from mytable where id not in (select top 900000 id from table)
هذه الجملة تقوم بارجاع العشر سجلات الموجودين بعد التسعمائة الف سجل الاوائل
نفس النتيجة الزمنية تقريبا
فرق واضح طبعا
واتمنى من الله ان يكون الموضوع مفيد للاعضاء
وشكرا
كنت قد قرات موضوع استاذى ابو ايهاب الخاص بعمل pageing للداتا جريد فيو وحملت المثال وشوفته ومثال رائع ولهذا رايت ان اضيف جزء مكمل لموضوع استاذى ابو ايهاب
مثال اخى ابو ايهاب يقوم على ارجاع جميع بيانات الجدول من قاعدة البيانات ووضعها في داتا سيت او داتا تيبل ثم بعدها يتم عمل pageing من الداتا تيبل الموجود والذى تم ملأه بكل البيانات
ولكن ماذا لو كان الجدول فيه الاف او ملايين السجلات وتم ارجاع كل هذه السجلات ووضعها في الداتا سيت او الداتا تيبل
طبعا عملية بطيئة ومرهقة ولن يكون وقتها هناك اى قيمة لعملية ال pageing
انا على سبيل المثال صممت جدول به ثلاث حقول ببيانات نصية وعملت ملأ لهذا الجدول حتى اصبح عدد سجلاته مليون وسبعمائة الف
وعندما عملت جملة استعلام بسيطة لارجاع جميع البيانات مثل الجملة الاتية والتى يعرفها اكيد كل المبرمجين
select * from table
كان متوسط زمن التنفيذ 14 ثانية مع العلم ان امكانيات جهازى عاليه جدا جدا
تخيل مثلا لو برنامجك على جهاز متوسط او على شبكة ضعيفة
سيكون البطء هو شعار البرنامج
ولهذا اعتقد ان الافضل عمل pageing من خلال جملة الاستعلام نفسها وذلك كالاتى
مثلا الجدول به الف سجل وانا اريد عرض عشر سجلات في الداتا جريد فيو في كل صفحة
مثلا عند ارجاع العشر سجلات الاولى تكون الجملة كالاتى
select top 10 * from table
هذه الجملة تقوم بارجاع فقط العشر سجلات الاولى
حسنا
على سبيل المثال اريد ارجاع العشر سجلات من السجل رقم 900 الى السجل رقم 910
وهى اساس عملية ال pageing التى تقوم على تقسيم البيانات على الصفحة في الداتا جريد فيو
اذن كيف سيكون شكل جملة الاستعلام
ستكون كالاتى
إقتباس :select top 10 * from mytable where id not in (select top 900 id from table)
هذه العملية لن تستغرق على اسوأ الظروف اكثر من ثانية واحدة او ثانيتين في حالة كان الجهاز ضعيف جدا
هل الفرق واضح بين زمنى التنفيذ
حتى لو كان الجدول به مليون سجل او اكثر ونفذت نفس الطريقة
مثلا
select top 10 * from mytable where id not in (select top 900000 id from table)
هذه الجملة تقوم بارجاع العشر سجلات الموجودين بعد التسعمائة الف سجل الاوائل
نفس النتيجة الزمنية تقريبا
فرق واضح طبعا
واتمنى من الله ان يكون الموضوع مفيد للاعضاء
وشكرا