سؤال

أوراكل يعرف القيد إلى 1000 عناصر في where a in (..) بند. هل هذا القيد موجود أيضا عند استخدام السبات بالزخيم مع Oracle؟

هل كانت مفيدة؟

المحلول

لا يزال قيود قاعدة البيانات هذه موجودة مع السبات. إذا كنت بحاجة حقا إلى الحصول على أكثر من 1000 عنصر في جملةك، فسيتعين عليك تقسيم القائمة بنفسك في التعليمات البرمجية وتشغيل الاستعلام لكل كتلة من 1000 مفاتيح، ثم إلحاق مجموعات النتائج معا.

ملاحظة ينهار هذا الاختراق إذا كان الاستعلام الخاص بك يحتاج إلى فرز أو إجمال نتائج الاستعلام لأن المجموعة الكاملة من النتائج ستكون معروفة فقط في التعليمات البرمجية. في هذه الحالة، تكون أفضل من العثور على طريقة أخرى لكتابة الاستعلام التي لا تتطلب IN بند.

نصائح أخرى

كان لدينا نفس القضية وحلها عن طريق تقسيمها إلى حزم 100 عام من البند

select * from mytable where id in (...) or id in (...).

ملاحظات:

  • تأكد من استخدام متغيرات الربط
  • تأكد من أن الاستعلام يبدو دائما هو نفسه. يتم ذلك عن طريق ملء بنود مع -1 حتى يكون لديك 100 عنصر في ذلك
  • حاول استخدامها دائما نفس العدد من Ored (...) بحيث ينظر الاستعلام دائما إلى نفسه

لماذا تريد النقاط أعلاه؟ هذا هو بحيث يمكن لمساعد الاستعلام إعادة استخدام خطة الاستعلام.

التحسين الإضافي:

  • بدلا من استخدام -1، يمكنك فقط استخدام القيمة الحقيقية الأخيرة جدا مرة أخرى. هذا هو أفضل قليلا.

مثال: في (1، 2، 3، 4، 4، ...، 4)

ملاحظة أيضا: تم اختبارنا مع العديد من الأرقام الثابتة من العناصر في البند في البند ولاحظت انخفاض أداء من 100 عنصر تقريبا.

نعم، حيث سيتصل السبات في أوراكل في بعض المراحل حتى يكون الحد الأدنى من حدود السبات وأوراكل

السبات لا يفعل شيئا مميزا مع البيانات الخاصة به - فقط يمرره إلى قاعدة البيانات

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top