2010-11-03 85 views
0
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  | 

我在archdetails1指數compname versionsvn3revno4索引; revno, comp, compname; comp, compname;和name, revno, comp, compname

上COMPNAME的指標是長度100

查詢仍然需要0.16 sec執行這是我的目的非常昂貴。我對索引沒有太多經驗,而且上面的索引是用最常用的變量創建的。請告知如何去做索引。

+0

尼斯編輯。你是怎樣做的?。我仍然在學習格式化。 – Gaurav 2010-11-03 22:34:22

+0

在一行的開頭有四個空格將會生成一個代碼塊,或者您可以單擊編輯工具欄中的「010」按鈕。僅供參考明亮的橙色問號框是鏈接到格式化備忘單:http://stackoverflow.com/editing-help堆棧溢出沒有語法突出顯示,但我通過手工清理你的SQL - 你的朋友。 – 2010-11-03 22:37:53

+0

我對mySql的使用經驗並不好。您是否考慮過MS Sql Server Express版本?它是免費的,並允許數據庫大小爲4演出。我切換到SQL Server,發現它要快得多。 – 2010-11-03 22:44:18

回答

0

快速回答:包含where子句中的字段。

在你的情況下,考慮索引svn3.revno和archdetails.version。然後查看聯接中的列。索引archdetails.compname也是一個值得考慮的事情。

當然,你不想添加太多的索引。他們讓你的插入和刪除更慢,並讓你的數據庫佔用更多的空間。

+0

是的,這是很好的一部分。空間沒有限制。插入和刪除非常罕見 – Gaurav 2010-11-03 22:49:26

+0

有關索引的簡短文章:http://rip747.wordpress.com/2007/12/03/optmizing-your-database-with-indexes/ – 2010-11-04 17:05:28

+0

如果您錯過了我的意見,考慮轉移到免費的快速版本的MS SQL Server。你可能會得到比MySql好得多的查詢性能。 – 2010-11-04 17:07:02

0

試試這個

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' 
相關問題