سوف بلدي مؤشر أن تستخدم إذا كان جميع الأعمدة لا يتم استخدامها ؟

StackOverflow https://stackoverflow.com/questions/135530

سؤال

لدي مؤشر على أعمدة أ ، ب ، ج ، د من الجدول T

لدي استفسار التي تشد من T A ، B ، C في جملة WHERE.

سوف مؤشر استخدامها أو منفصلة مؤشر يلزم أن يشمل فقط A, B, C ؟

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

المحلول

ديفيد ب هو الحق الذي يجب عليك التحقق من تنفيذ خطة للتحقق من مؤشر يستخدم.

سوف مؤشر استخدامها أو منفصلة مؤشر يلزم أن يشمل فقط A, B, C ؟

للإجابة على هذا الجزء الأخير من السؤال وهو ما أعتقد أنه جوهر الموضوع الأساسي (بدلا من حل فوري) ، هناك تقريبا لم سببا مؤشر مجموعة فرعية من الأعمدة المفهرسة.إذا كان لديك مؤشر (أ ، ب ، ج ، د) ، حيث ضد (أ ، ب ، ج) من المرجح أن يؤدي إلى فهرس تسعى, وهو الوضع المثالي-مؤشر يشمل جميع المعلومات المحرك يحتاج إلى الذهاب مباشرة إلى مجموعة النتائج.أعتقد أن هذا ينطبق على أنواع رقمية و المساواة الاختبارات في سلسلة أنواع ، على الرغم من أنه يمكن أن تنهار مع مثل '%'s).من ناحية أخرى, إذا كان لديك فقط الإشارة D, كنت على الأرجح في نهاية المطاف مع فهرس المسح الضوئي, مما يعني أن محرك SQL يجب أن تفحص جميع مجموعات A, B, C ثم تحقق ما إذا كان د استيفاء المعايير الخاصة بك قبل أن تقرر ما إذا كنت تريد إضافة صف إلى مجموعة النتائج.على وجه الخصوص طاولة كبيرة عندما وجدت نفسي مضطرا إلى القيام بالكثير من الاستفسارات ضد عمود "د", وأضاف أنا إضافية مؤشر D فقط, ورأيت حوالي 90% تحسين الأداء.

تحرير:كما أود أن أوصي باستخدام مرشد ضبط مشغل قاعدة بيانات في SQL server إدارة Studio.سوف أقول لكم إذا كان الجدول غير المفهرسة مثالي الاستعلام الذي تريد تشغيله.

نصائح أخرى

يعتمد ذلك!

WHERE A like '%x%'
  and B = 1
  and C = 1
//
WHERE A = 1
  OR B = 1
  OR C = 1
//
WHERE DateAdd(dd, 1, A) = '2008-01-01'
  AND B = 1
  AND C = 1

هذه لا تعتمد على المؤشر ، لأن مؤشر ليست مفيدة.

انقر على "عرض يقدر خطة التنفيذ" لتأكيد إمكانية مؤشر الاستخدام.

في قواعد بيانات أوراكل وهذا ما يسمى مؤشر مركب ( 12g مستندات ولكن صالح عن الإصدارات السابقة)

مركب فهارس أن سرعة استرجاع البيانات لتحديد البيانات في جملة WHERE المراجع جميع من أبرز جزء من الأعمدة في المؤشر المركب.ولذلك ترتيب الأعمدة المستخدمة في تعريف مهم.في العام الأكثر شيوعا الوصول إليها الأعمدة أولا.

حتى في الحالة الخاصة بك ، نعم.مؤشر قد/يمكن استخدامها.هذا يمكن التحقق منها باستخدام شرح الخطة.

إذا MS SQLSERVER مختلفة (وأظن أنه قد) تحتاج إلى إجابة جديدة.

تحرير: ينبغي أن نذكر أيضا أنها سوف فقط النظر في مؤشر للاستخدام..هذا لا يعني بالضرورة أنه سيتم استخدامه.

Edit2: أوراكل 11g وما بعدها لديها الآن خيار من شأنها أن تسمح تخطي الأعمدة في فهرس.لذا استعلام على A ، B و D قد لا تزال تستخدم مؤشر

المؤشر سيتم استخدامها ، نعم.انها ذكية إلى حد ما عن الفهارس التي سوف تنتج أكثر الأمثل خطة الاستعلام ، وينبغي أن يكون لديك أي مشكلة مع هذا.

كما هو الحال مع هذا النوع من الشيء لا تأخذ في كلمة بلدي لذلك - معيارا ذلك.إنشاء جدول ، وملء مع ممثل بيانات الاستعلام ، مؤشر عليه و الاستعلام مرة أخرى.

حقيقة أن مؤشر يحتوي على عمود الذي يتم استخدامه في الاستعلام الخاص بك لا يمنع من استخدامه.

هذا لا يعني أنه بالتأكيد سوف تستخدم ، قد يكون تجاهلها لسبب مختلف (ربما بسبب واحد أو أكثر من المؤشرات هي أكثر فائدة).

وهو squizz في المقدرة تنفيذ خطة لمعرفة ما يمكن أن يحدث.

تبدأ مع بسيطة يساوي بحث (حيث A=1 و B='Red' و C=287) نعم مؤشر (على الأرجح) أن تستخدم.المؤشر سيتم استخدامها لأول مرة لمساعدة محسن "تخمين" عدد الصفوف التي سوف تتناسب مع الاختيار ، ثم الثانية ، في الواقع الوصول إلى تلك الصفوف.

ردا على ديفيد ب تعليق عن "مثل" المسند, SQLServer قد لا تزال تستخدم المؤشر يعتمد على ما تقوم بتحديدها.على سبيل المثال, إذا كنت اختيار count(*) ثم SQLServer المرجح أن مسح مؤشر وعدد الزيارات التي تتطابق مع جملة where منذ المؤشر هو أصغر و تتطلب عدد أقل من IOs إلى مسح.و قد قررت أن تفعل ذلك حتى لو كنت اختيار بعض الأعمدة من الجدول الأساسي ، اعتمادا على كيفية انتقائية SQLServer يشعر المؤشر.

هنا آخر "ذلك يعتمد" الجواب...كما يعتمد على كيفية كبيرة الجدول الخاص بك هو...

أنا أتفق مع أي شخص آخر لديه المذكورة التحقق من تنفيذ خطة للتحقق من ما إذا كان أو لم يكن مؤشر يستخدم.

هنا بضعة مقالات عن القراءة تنفيذ الخطة التي يجب أن تجد المفيدة:

http://www.sqlservercentral.com/articles/Administering/executionplans/1345/ http://www.codeproject.com/KB/database/sql-tuning-tutorial-1.aspx

هناك أيضا مقالة جيدة عن يسعى مقابلبفحص أن أنصح:http://blogs.msdn.com/craigfr/archive/2006/06/26/647852.aspx

هناك سجل من مقالات جيدة على كريغ فريدمان بلوق, هنا واحد آخر يجب أن تجد من المفيد.هذه المقالة عن بعض العوامل يستخدم SQL Server لتحديد أي مؤشر إلى استخدام...

http://blogs.msdn.com/craigfr/archive/2006/07/13/664902.aspx

العناية!جيف

عموما نعم سيكون كل قواعد البيانات الحديثة هي ذكية بما فيه الكفاية للقيام بذلك.هناك استثناءات ، على سبيل المثال ، إذا كانت الإحصاءات على الطاولة تظهر أن حجم البيانات في أنها صغيرة بما فيه الكفاية أن الجدول الكامل قراءة سوف تكون أكثر كفاءة ثم مؤشر سيتم خصم, ولكن كقاعدة عامة, يمكنك الاعتماد على ذلك عند الاقتضاء.

وبالتالي يمكنك الاستفادة من هذا عند تصميم الفهارس.أقول على سبيل المثال لدي جدول الذي يحتوي على A, B, C كما القيم الأساسية والأعمدة Y و Z التي تحتوي على البيانات التي أعرف سيتم استرجاعها في كثير من الأحيان من خلال تصريحات

SELECT Y FROM table WHERE A = alpha and B = beta and C = gamma 

SELECT Z FROM table WHERE A = alpha and B = beta and C = gamma 

أنا عموما إنشاء فهرس على A,B,C,X,Z - على افتراض أن X و Z هي بعض من المعقول حقل صغير.والسبب في ذلك هو أن أعرف الوصول المسار في البيانات أعلاه استخدام الفهرس ، البيانات أريد استرداد بالفعل في قراءة مؤشر ثم لا منفصلة قراءة من كتلة من البيانات المطلوبة لاسترداد بيانات الجدول في حد ذاته سوف تكون هناك حاجة.هذه الاستراتيجية يمكن أن تسرع كبير في استرجاع البيانات في بعض الظروف.بالطبع, كنت تدفع ثمن ذلك في التحديث تكاليف مساحة القرص لذلك تحتاج إلى فهم ما هي قاعدة البيانات الخاصة بك هو القيام قبل تطبيقه, ولكن كما هو الحال في معظم قواعد البيانات يقرأ بشكل كبير يفوق يكتب عموما تستحق النظر.

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