Какие столбцы, чтобы индексировать, чтобы сделать этот запрос быстрее?

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 - это один, чтобы рассмотреть.

Конечно, вы не хотите добавлять слишком много индексов. Они делают ваши вставки и удаляют медленнее и делают вашу БД занять больше места.

Другие советы

Попробуй это

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