题
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
.
综合上的索引长度为100。
查询仍然需要 0.16 sec
执行这对于我的目的非常昂贵。我在索引方面没有太多经验,上述索引是使用最常使用的变量创建的。请建议如何解决索引。
解决方案
快速答案:包括您的WHERE子句中的字段。
在您的情况下,请考虑索引svn3.revno and 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'
不隶属于 StackOverflow