ما هي الأعمدة التي يجب فهرستها لجعل هذا الاستعلام أسرع؟

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

  •  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'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top