ما هي الأعمدة التي يجب فهرستها لجعل هذا الاستعلام أسرع؟
-
28-09-2019 - |
سؤال
SELECT t.compname, min(t2.version) FROM archdetails t
INNER JOIN svn3 b ON t.compname = b.compname
INNER JOIN archdetails t2 ON t.compname = t2.compname
WHERE ((b.revno = '270294' OR b.revno = 'r275869' OR b.revno = 'r393316'))
AND t.version = '1.6'
GROUP BY t.compname`
الطاولة archdetails
:
Field | Type | Null | Key | Default | Extra
-------------------------+--------------+------+-----+---------+-------
name | varchar(15) | NO | | NULL |
compname | varchar(500) | NO | MUL | NULL |
sno | int(11) | NO | | NULL |
count | int(11) | NO | | NULL |
fdindex | int(11) | NO | | NULL |
version | varchar(10) | NO | | NULL |
sdate | date | NO | | NULL |
edate | date | NO | | NULL |
inFlat | int(11) | NO | | NULL |
inStar | int(11) | NO | | NULL |
inNostar | int(11) | NO | | NULL |
inReducedStar | int(11) | NO | | NULL |
الطاولة svn3
:
Field | Type | Null | Key | Default | Extra
---------+---------------+------+-----+---------+------
name | varchar(20) | NO | MUL | NULL |
revno | varchar(10) | NO | MUL | NULL |
comp | varchar(1000) | NO | MUL | NULL |
compname | varchar(1000) | NO | | NA |
أملك 1
فهرس على compname version
في archdetails
و 4
الفهارس على svn3
على revno
; revno, comp, compname
; comp, compname
; ؛ و name, revno, comp, compname
.
الفهارس على compname هو طول 100.
لا يزال الاستعلام يتطلب 0.16 sec
للتنفيذ وهو مكلف للغاية لغرضي. ليس لدي الكثير من الخبرة مع الفهارس وتم إنشاء الفهارس المذكورة أعلاه مع المتغيرات في معظم الأحيان. يرجى تقديم المشورة بشأن كيفية القيام بالفهارس.
المحلول
إجابة سريعة: قم بتضمين الحقول الموجودة في شرطك.
في حالتك ، فكر في فهرسة SVN3.Revno و Archdetails.Version. ثم انظر إلى الأعمدة في انضمامك. فهرس Archdetails.compname هو واحد يجب مراعاته أيضًا.
بالطبع لا تريد إضافة الكثير من الفهارس. أنها تجعل إدراجك وحذف أبطأ ، وجعل DB الخاص بك الاستيلاء على مساحة أكبر.
نصائح أخرى
جرب هذا
SELECT DISTINCT
t.compname,
t.version
FROM archdetails t
INNER JOIN svn3 b
ON t.compname
= b.compname
WHERE b.revno in ('270294','r275869','r393316')
AND t.version = '1.6'