الخطوط العريضة
ترحيل مقارنة من خلال ROWNUM أوراكل تحقيقه، وحققت الخلية عادة الحد الاستعلام الترحيل. ثم أنكم تعلمون أن هناك مشكلة أداء لماي الحد عليه؟
استخدام الحد
* اختر من الجدول LIMIT الصفوف | صفوف تعويض تعويض
ويمكن استخدام بند LIMIT لإجبار عوائد بيان تحديد عدد معين من السجلات. LIMIT يأخذ واحد أو اثنين معلمات رقمية. يجب أن يكون حجة على ثابت صحيح. نظرا معلمتين، وتحدد المعلمة الأولى عادت الصفوف الأولى تعويض، ويحدد الحجة الثانية عاد عدد من الصفوف كحد أقصى. إزاحة 0 غير الصفوف الأولية (بدلا من 1): للحصول على التوافق مع كيو، الخلية كما يدعم بناء الجملة: LIMIT # OFFSET #.
وضع الترحيل الاستعلام الخلية
مسقل بيان ترحيل SQL، إذا بناء الجملة TOP وMSSQL بالمقارنة مع جملة LIMIT الخلية بحيث أنيقة للنظر كثيرا. استخدامه لترحيل هو أكثر شيء طبيعي.
1، أكثر طريقة الترحيل الأساسي:
SELECT ... FROM ... أين ... ORDER BY ... LIMIT ...في حالة كمية صغيرة من البيانات، مثل SQL، وتكون كافية، والمشكلة الوحيدة هي التأكد من أن نلاحظ استخدام الفهرس:
على سبيل المثال، إذا كان بيان SQL الفعلي كما يلي، ثم CATEGORY_ID، والهوية بناء على اثنين المؤشر المركب هو أفضل:
* اختر من المواد WHERE على category_id = 123 ORDER BY معرف LIMIT 50، 102، ترقيم الصفحات الفرعية الاستعلام:
كما زادت كمية البيانات، المزيد والمزيد من الصفحات، صفحات قليلة منه قد تبدو بعد SQL الشخصي:
* اختر من المواد WHERE على category_id = 123 ORDER BY معرف LIMIT 10000، 10هنا هي الصفحة الى الوراء، وبيان LIMIT تعويض ستكون أكبر، وسوف تكون سرعة بشكل ملحوظ أبطأ.
في هذه الحالة، يمكن تحسين الكفاءة من خلال الاستعلامات الفرعية الترحيل الطريقة، على النحو التالي:
* اختر من المواد WHERE معرف > = (معرف اختر من المواد WHERE على category_id = 123 ORDER BY معرف LIMIT 10000، 1) LIMIT 103، JOIN ترقيم الصفحات
* اختر من `content` AS T1 JOIN (SELECT معرف من `ORDER BY content` LIMIT معرف تنازلي". ($ ل-1) * $ حجم الصفحة. "(1)) AS T2 أين t1.id < = t1.id T2.id ORDER BY DESC LIMIT $ حجم الصفحةمشكلة :
للمشاريع الصغيرة تعويض للحد مباشرة الاستعلام لا توجد مشكلة، ولكن مع كمية متزايدة من البيانات، في الصفحة التالية، سوف البيانات الحد تعويض ستكون أكبر، وسوف تكون سرعة بشكل ملحوظ أبطأ.
أفكار الأمثل :
تجنب الإفراط في كمية البيانات تسجيل المسح.
حل
ترقيم الصفحات فرعي أو JOIN طريقة الترحيل.
التسجيل الترحيل والكفاءة الترحيل الفرعية استعلام على المستوى الأساسي، واستهلاك الوقت هي في الأساس نفسه.
وهنا مثال على ذلك. الخلية هو، هذه الحالة يمكن أن يكون الأمثل عموما مفتاح أساسي من نوع عددي تنشيط الذاتي على النحو التالي.
الجدول التالي مع بيئة إنتاج حقيقية من 800،000 البيانات، على سبيل المثال، مقارنة قبل وبعد تناولهم الأمثل الاستعلام:
- الحد التقليدية، مسح الوثائق * اختر من TABLENAME ORDER BY معرف LIMIT 500000،2. الصفوف المتأثرة: 0 الوقت: 5.371s - الاستعلام الفرعية، وهي تفحص فهرس * اختر من TABLENAME WHERE معرف > = (SELECT معرف من TABLENAME ORDER BY معرف LIMIT 500000، 1) LIMIT 2. الصفوف المتأثرة: 0 الوقت: 0.274s - انضمام ترقيم الصفحات * اختر من TABLENAME AS T1 التسجيل (معرف اختر من TABLENAME ORDER BY معرف تنازلي LIMIT 500000، 1) AS T2 WHERE t1.id < t1.id = T2.id ORDER BY تنازلي LIMIT 2. الصفوف المتأثرة: 0 الوقت: 0.278sيمكننا أن نرى زيادة الأداء الأمثل ما يقرب من 20 أضعاف.
المبدأ الأمثل
يتم الاستعلام الفرعي على المؤشر، في حين أن التحقيق العام المنجز على ملف البيانات، بصفة عامة، ملف الفهرس هو أصغر بكثير من ملف البيانات، وبالتالي فإن العملية ستكون أكثر كفاءة. لإزالة كافة الحقول كمحتوى، وكميات كبيرة من البيانات تحتاج لعبور اللبنة الأولى وإزالتها، في حين أن الثانية وضعه مباشرة إلى حد كبير وفقا لمجال مؤشر، فقط جلب محتوى المقابلة من خلال يعزز كثيرا من كفاءة الطبيعية.
لذلك، الحد الأمثل، لا يتم استخدام الحد الأقصى مباشرة، ولكن أولا الحصول على معرف تعويض، ومن ثم استخدامها مباشرة حجم الحد للحصول على البيانات.
في مشروع الاستخدام الفعلي، يمكنك استخدام استراتيجية مماثلة للتعامل مع وضع الترحيل الطريقة، على سبيل المثال، صفحة 100 البيانات لتحديد ما إذا كان أقل من 100 صفحة، على استخدام معظم طريقة الترحيل الأساسي، أكبر من 100، واستخدام ترقيم الصفحات الاستفسارات الفرعية.
سوف Devops وبعد تبادل جوانب DBA المزيد من المحتوى، يمكن للأصدقاء المهتمين ننظر -