استخدام الحد في Mysql: عندما نستخدم عبارات الاستعلام، غالبًا ما نحتاج إلى إرجاع الصفوف القليلة الأولى أو المتوسطة من البيانات. ماذا يجب أن نفعل في هذا الوقت؟ لا تقلق، الخلية توفر لنا بالفعل مثل هذه الوظيفة.
حدد * من الجدول LIMIT [إزاحة،] صفوف |
يمكن استخدام جملة LIMIT لفرض عبارة SELECT لإرجاع عدد محدد من السجلات. يقبل LIMIT وسيطة رقمية واحدة أو اثنتين. يجب أن تكون المعلمة عددًا صحيحًا ثابتًا. إذا تم توفير معلمتين، تحدد المعلمة الأولى إزاحة صف السجل الأول الذي تم إرجاعه، وتحدد المعلمة الثانية الحد الأقصى لعدد صفوف السجلات التي تم إرجاعها. إزاحة صف السجل الأولي هي 0 (بدلاً من 1): للتوافق مع PostgreSQL، تدعم MySQL أيضًا بناء الجملة: LIMIT # OFFSET #.
mysql> SELECT * من الجدول LIMIT 5,10; // استرداد صفوف السجل 6-15
// لاسترداد كافة صفوف السجلات من إزاحة معينة إلى نهاية مجموعة السجلات، يمكنك تحديد -1 كمعلمة ثانية:
mysql> SELECT * من الجدول LIMIT 95,-1; // استرداد صف السجل 96-last.
// إذا تم إعطاء معلمة واحدة فقط، فهذا يعني إرجاع الحد الأقصى لعدد صفوف السجل:
mysql> SELECT * FROM table LIMIT 5; // استرداد أول 5 صفوف سجل
// بمعنى آخر، LIMIT n يعادل LIMIT 0,n.
لاحظ الفرق بين الحد 10 والحد 9,1:
على سبيل المثال:
1.
حدد * من الموسوعة حيث المعرف>=(
حدد الحد الأقصى (المعرف) من (
حدد المعرف من الموسوعة اطلب حسب المعرف الحد 90001
) كما تمب
) الحد 100؛
2.
حدد * من الموسوعة حيث المعرف>=(
حدد الحد الأقصى (المعرف) من (
حدد المعرف من الموسوعة الترتيب حسب المعرف بحد 90000,1
) كما تمب
) الحد 100؛
وبالمثل، إذا حصلنا على 100 سجل التالية بعد 90000، أيهما أسرع، الجملة الأولى أم الجملة الثانية؟
الجملة الأولى هي أن تأخذ أول 90001 سجل أولاً، وأن تأخذ أكبر قيمة معرف كمعرف البداية، ثم تستخدمها لتحديد موقع السجلات الـ 100 التالية بسرعة. الجملة الثانية هي أن تأخذ آخر 90000 سجل فقط، ثم تأخذ قيمة المعرف. استخدم علامة البداية لتحديد الجملة الأولى من 100 سجل وتنفيذ النتيجة 100 صف في مجموعة (0.23) ثانية
نتيجة تنفيذ الجملة 2.100 صف في مجموعة (0.19) ثانية
في الواقع، يمكن تبسيط الجملة الثانية إلى:
حدد * من الموسوعة حيث المعرف>=(
حدد المعرف من حد الموسوعة 90000,1
)الحد 100؛
استخدم معرف السجل رقم 90,000 مباشرةً دون المرور بعملية Max. يجب أن يكون هذا أكثر كفاءة من الناحية النظرية، ولكن في الاستخدام الفعلي يكون التأثير غير مرئي تقريبًا، لأن معرف تحديد الموضع يُرجع سجلًا واحدًا فقط، ولا يحتاج Max تقريبًا إلى ذلك. يمكنك الحصول على النتيجة، لكن كتابتها بهذه الطريقة أكثر وضوحًا، مما يلغي الحاجة إلى رسم ثعبان.
اختر أفضل 100 * من الموسوعة حيث المعرف>=(
اختر أعلى 90001 ماكس(ID) من (
حدد المعرف من الموسوعة الترتيب حسب المعرف
) كما تمب
)
ولكن بغض النظر عما إذا تم تنفيذه في إجراء مخزن أو مباشرة في التعليمات البرمجية، فإن عنق الزجاجة هو دائمًا أن TOP الخاص بـ MS-SQL يُرجع دائمًا سجلات N الأولى. وهذا الموقف لا يكون محسوسًا بعمق عندما لا تكون كمية البيانات كبيرة، ولكن إذا هناك مئات أو آلاف من 10000، وستكون الكفاءة منخفضة بالتأكيد، وبالمقارنة، فإن حد MySQL له العديد من المزايا.
،ينفذ:
حدد المعرف من الموسوعة بحد 90000
حدد المعرف من حد الموسوعة 90000,1
النتائج هي:
90000 صف في المجموعة (0.36) ثانية
صف واحد في المجموعة (0.06) ثانية
يمكن لـ MS-SQL فقط استخدام معرف Select Top 90000 من cyclopedia. وقت التنفيذ هو 390 مللي ثانية، ووقت تنفيذ نفس العملية ليس بنفس جودة 360 مللي ثانية في MySQL.
يتم استخدام إزاحة الحد عندما يكون هناك عدد أكبر من السجلات، وعندما يكون هناك عدد أقل من السجلات، تكون الإزاحة أصغر، لذا من الأفضل استخدام الحد مباشرة. كلما كان الإزاحة أكبر، كان الأخير أفضل.
////////////////////////////////////////////////////////////////// /// ///////////////////////
1. عندما يكون الإزاحة صغيرًا نسبيًا.
حدد * من yanxue8_visit الحد 10,10
تشغيل عدة مرات، يبقى الوقت بين 0.0004-0.0005
حدد * من yanxue8_visit حيث vid >=(
حدد الفيديو من yanxue8_visit الترتيب حسب حد الفيديو 10,1
) الحد 10
تشغيل عدة مرات، يبقى الوقت بين 0.0005-0.0006، بشكل رئيسي 0.0006
الخلاصة: عندما تكون الإزاحة صغيرة، فمن الأفضل استخدام الحد مباشرة. هذا العرض يرجع إلى الاستعلام الفرعي.
2. عندما تكون الإزاحة كبيرة.
حدد * من yanxue8_visit حد 10000,10
قم بالتشغيل عدة مرات، ويظل الوقت حوالي 0.0187
حدد * من yanxue8_visit حيث vid >=(
حدد vid من yanxue8_visit اطلب حسب vid حد 10000,1
) الحد 10
بعد عدة عمليات تشغيل، يظل الوقت عند حوالي 0.0061، وهو ما يمثل ثلث الوقت السابق فقط. كلما كان الإزاحة المحددة مسبقًا أكبر، كان الأخير أفضل.
////////////////////////////////////////////////////////////////// /// //////////////////////////////////////////////////////////////// /
mysql> SELECT * من الجدول LIMIT 95,-1; // استرداد صف السجل 96-last.
// إذا تم إعطاء معلمة واحدة فقط، فهذا يعني إرجاع الحد الأقصى لعدد صفوف السجلات
هذه المقالة مأخوذة من مدونة CSDN، يرجى الإشارة إلى المصدر عند إعادة الطباعة: http://blog.csdn.net/zhqingyun163/archive/2009/12/22/5053579.aspx.