需要索引哪些列才能使此查询更快?
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 |
我在archdetails
1
指数compname version
和svn3
上revno
4
索引; revno, comp, compname
; comp, compname
;和name, revno, comp, compname
。
上COMPNAME的指标是长度100
查询仍然需要0.16 sec
执行这是我的目的非常昂贵。我对索引没有太多经验,而且上面的索引是用最常用的变量创建的。请告知如何去做索引。
快速回答:包含where子句中的字段。
在你的情况下,考虑索引svn3.revno和archdetails.version。然后查看联接中的列。索引archdetails.compname也是一个值得考虑的事情。
当然,你不想添加太多的索引。他们让你的插入和删除更慢,并让你的数据库占用更多的空间。
是的,这是很好的一部分。空间没有限制。插入和删除非常罕见 – Gaurav 2010-11-03 22:49:26
有关索引的简短文章:http://rip747.wordpress.com/2007/12/03/optmizing-your-database-with-indexes/ – 2010-11-04 17:05:28
如果您错过了我的意见,考虑转移到免费的快速版本的MS SQL Server。你可能会得到比MySql好得多的查询性能。 – 2010-11-04 17:07:02
试试这个
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'
尼斯编辑。你是怎样做的?。我仍然在学习格式化。 – Gaurav 2010-11-03 22:34:22
在一行的开头有四个空格将会生成一个代码块,或者您可以单击编辑工具栏中的“010”按钮。仅供参考明亮的橙色问号框是链接到格式化备忘单:http://*.com/editing-help堆栈溢出没有语法突出显示,但我通过手工清理你的SQL - 你的朋友。 – 2010-11-03 22:37:53
我对mySql的使用经验并不好。您是否考虑过MS Sql Server Express版本?它是免费的,并允许数据库大小为4演出。我切换到SQL Server,发现它要快得多。 – 2010-11-03 22:44:18