sql قواعد كيفية استخدام الفهرس في بيان محدد؟




طريقة عمل فهرس للملفات (6)

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

ومع ذلك ، في MSSQL ، يمكنك تحديد index hint والذي يمكن أن يحدد أنه يجب استخدام فهرس معين لتنفيذ هذا الاستعلام. مزيد من المعلومات حول هذا يمكن العثور عليها here .

Index hint يبدو أيضًا متاحًا لـ MySQL . شكرا لتيودور قسطنطين.

دعنا نقول في جدول الموظفين ، لقد قمت بإنشاء فهرس (idx_name) على عمود emp_name بالجدول.

هل أحتاج إلى تحديد اسم الفهرس بوضوح في جملة محددة أم أنه سيتم استخدامه تلقائيًا لتسريع الاستعلامات.

إذا كان مطلوبًا أن يتم تحديده في جملة الاختيار ، ما هي صيغة استخدام الفهرس في استعلام التحديد؟


Answer #1

باستخدام العمود الذي يتم تطبيق الفهرس عليه ضمن شروطك ، سيتم تضمينه تلقائيًا. لا يلزمك استخدامه ، ولكنه سيزيد من سرعة طلبات البحث عند استخدامها.

SELECT * FROM TABLE WHERE attribute = 'value'

سوف تستخدم الفهرس المناسب.


Answer #2

كيفية استخدام الفهرس في بيان محدد؟
من هنا:

   SELECT * FROM table1 USE INDEX (col1_index,col2_index)
    WHERE col1=1 AND col2=2 AND col3=3;


SELECT * FROM table1 IGNORE INDEX (col3_index)
WHERE col1=1 AND col2=2 AND col3=3;


SELECT * FROM t1 USE INDEX (i1) IGNORE INDEX (i2) USE INDEX (i2);

والعديد من طرق التحقق من هذا

هل أحتاج إلى تحديد صراحة؟

  • لا ، لا حاجة لتحديد صراحة.
  • يجب أن يقوم محرك DB بتحديد الفهرس المستخدم تلقائيًا استنادًا إلى خطط تنفيذ الاستعلام التي ينشئها من إجابةTudor Constantin.
  • سيحكم المُحسِّن على ما إذا كان استخدام الفهرس سيجعل الاستعلام يعمل بشكل أسرع ، وإذا كان كذلك ، فسيستخدم الفهرس. من إجابةniktrl

Answer #3

سؤال جيد،

عادةً ، يجب أن يقوم محرك DB بتحديد الفهرس المستخدم تلقائيًا استنادًا إلى خطط تنفيذ الاستعلام التي يقوم بإنشائها. ومع ذلك ، هناك بعض الحالات النادرة جدًا عندما تريد فرض استخدام DB لفهرس محدد.

لتتمكن من الإجابة عن سؤالك المحدد ، عليك تحديد قاعدة البيانات التي تستخدمها.

بالنسبة إلى MySQL ، فأنت تريد قراءة وثائق Index Hint Syntax حول كيفية القيام بذلك


Answer #4

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

إذا كان الاستعلام الخاص بك هو من النموذج:

SELECT Name from Table where Name = 'Boris'

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

إذا كان جدولًا واسعًا (الكثير من الأعمدة) وكنت تفعل:

SELECT * from Table where Name = 'Boris'

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


Answer #5

سيحكم المُحسِّن على ما إذا كان استخدام الفهرس سيجعل الاستعلام يعمل بشكل أسرع ، وإذا كان كذلك ، فسيستخدم الفهرس.

اعتمادًا على RDBMS ، يمكنك فرض استخدام فهرس ، على الرغم من أنه غير مستحسن إلا إذا كنت تعرف ما تقوم به.

بشكل عام ، يجب أن تقوم بفهرسة الأعمدة التي تستخدمها في جدول الربط وأين العبارات





indexing