2011-04-03 65 views
2

我在32位機器上運行MySQL 5.1,我使用Hibernate條件生成下面的查詢;出於某種原因,我不明白它需要30秒才能執行,即使根據'解釋'說,沒有執行全表掃描。複雜的查詢需要30秒,沒有全表掃描

完整的細節我們有一個股票,stocks_groups,指標,indicator_definition(加上其他不相關的表,如國家,交流...)。庫存表包含大約18000行,組表大約3000-ish,指標表有710,000多行。所有表都使用自動生成的id列,並且我在由(id,stock_id和definition_id)組成的指標表中創建了一個額外的索引。如果我從查詢中刪除指標,它會在0.030秒內執行,這正是我所期望的,所以我的猜測是那裏一定有問題,但是我對數據庫的瞭解有限,而且我一直在尋找一個辦法。

任何幫助將非常感激,

由於提前,

Xabier的。

查詢:

explain select 
    this_.id as id232_12_, 
    this_.created_on as created2_232_12_, 
    this_.updated_on as updated3_232_12_, 
    this_.version as version232_12_, 
    this_.autoupdate as autoupdate232_12_, 
    this_.bloomberg as bloomberg232_12_, 
    this_.currency_id as currency19_232_12_, 
    this_.cusip as cusip232_12_, 
    this_.disabled as disabled232_12_, 
    this_.exchange_id as exchange20_232_12_, 
    this_.isin as isin232_12_, 
    this_.name as name232_12_, 
    this_.price_composition as price11_232_12_, 
    this_.region_id as region21_232_12_, 
    this_.reuters as reuters232_12_, 
    this_.sedol as sedol232_12_, 
    this_.status_message_last_update as status14_232_12_, 
    this_.status_message_severity as status15_232_12_, 
    this_.status_message_text as status16_232_12_, 
    this_.ticker as ticker232_12_, 
    this_.trading_days_id as trading22_232_12_, 
    this_.type as type232_12_, 
    currency4_.id as id220_0_, 
    currency4_.created_on as created2_220_0_, 
    currency4_.updated_on as updated3_220_0_, 
    currency4_.version as version220_0_, 
    currency4_.code as code220_0_, 
    currency4_.long_name as long6_220_0_, 
    currency4_.short_name as short7_220_0_, 
    currency4_.symbol as symbol220_0_, 
    groups5_.stock_id as stock1_14_, 
    groups_als1_.id as group2_14_, 
    groups_als1_.id as id223_1_, 
    groups_als1_.created_on as created3_223_1_, 
    groups_als1_.updated_on as updated4_223_1_, 
    groups_als1_.version as version223_1_, 
    groups_als1_.active as active223_1_, 
    groups_als1_.alt_name as alt7_223_1_, 
    groups_als1_.code as code223_1_, 
    groups_als1_.locked as locked223_1_, 
    groups_als1_.name as name223_1_, 
    groups_als1_.parent_id as parent12_223_1_, 
    groups_als1_.position as position223_1_, 
    groups_als1_.primary_index_id as primary13_223_1_, 
    groups_als1_.type_id as type14_223_1_, 
    groups_als1_.kind as kind223_1_, 
    parent_als2_.id as id223_2_, 
    parent_als2_.created_on as created3_223_2_, 
    parent_als2_.updated_on as updated4_223_2_, 
    parent_als2_.version as version223_2_, 
    parent_als2_.active as active223_2_, 
    parent_als2_.alt_name as alt7_223_2_, 
    parent_als2_.code as code223_2_, 
    parent_als2_.locked as locked223_2_, 
    parent_als2_.name as name223_2_, 
    parent_als2_.parent_id as parent12_223_2_, 
    parent_als2_.position as position223_2_, 
    parent_als2_.primary_index_id as primary13_223_2_, 
    parent_als2_.type_id as type14_223_2_, 
    parent_als2_.kind as kind223_2_, 
    stock8_.id as id232_3_, 
    stock8_.created_on as created2_232_3_, 
    stock8_.updated_on as updated3_232_3_, 
    stock8_.version as version232_3_, 
    stock8_.autoupdate as autoupdate232_3_, 
    stock8_.bloomberg as bloomberg232_3_, 
    stock8_.currency_id as currency19_232_3_, 
    stock8_.cusip as cusip232_3_, 
    stock8_.disabled as disabled232_3_, 
    stock8_.exchange_id as exchange20_232_3_, 
    stock8_.isin as isin232_3_, 
    stock8_.name as name232_3_, 
    stock8_.price_composition as price11_232_3_, 
    stock8_.region_id as region21_232_3_, 
    stock8_.reuters as reuters232_3_, 
    stock8_.sedol as sedol232_3_, 
    stock8_.status_message_last_update as status14_232_3_, 
    stock8_.status_message_severity as status15_232_3_, 
    stock8_.status_message_text as status16_232_3_, 
    stock8_.ticker as ticker232_3_, 
    stock8_.trading_days_id as trading22_232_3_, 
    stock8_.type as type232_3_, 
    grouptype9_.id as id224_4_, 
    grouptype9_.created_on as created2_224_4_, 
    grouptype9_.updated_on as updated3_224_4_, 
    grouptype9_.version as version224_4_, 
    grouptype9_.name as name224_4_, 
    components10_.virtual_group_id as virtual2_14_, 
    components10_.group_id as group1_14_, 
    components10_.group_id as group1_225_5_, 
    components10_.virtual_group_id as virtual2_225_5_, 
    components10_.operator as operator225_5_, 
    components10_.operator_name as operator4_225_5_, 
    components10_.sequence as sequence225_5_, 
    indicators11_.stock_id as stock23_15_, 
    indicators11_.id as id15_, 
    indicators11_.id as id226_6_, 
    indicators11_.created_on as created3_226_6_, 
    indicators11_.updated_on as updated4_226_6_, 
    indicators11_.version as version226_6_, 
    indicators11_.definition_id as definition22_226_6_, 
    indicators11_.stock_id as stock23_226_6_, 
    indicators11_.dbl_delta1 as dbl6_226_6_, 
    indicators11_.dbl_value1 as dbl7_226_6_, 
    indicators11_.bool_delta1 as bool8_226_6_, 
    indicators11_.bool_value1 as bool9_226_6_, 
    indicators11_.bool_delta2 as bool10_226_6_, 
    indicators11_.bool_value2 as bool11_226_6_, 
    indicators11_.int_delta1 as int12_226_6_, 
    indicators11_.int_value1 as int13_226_6_, 
    indicators11_.dbl_delta2 as dbl14_226_6_, 
    indicators11_.dbl_value2 as dbl15_226_6_, 
    indicators11_.dbl_delta3 as dbl16_226_6_, 
    indicators11_.dbl_value3 as dbl17_226_6_, 
    indicators11_.date_set as date18_226_6_, 
    indicators11_.relative_id as relative24_226_6_, 
    indicators11_.is_support as is19_226_6_, 
    indicators11_.int_delta2 as int20_226_6_, 
    indicators11_.int_value2 as int21_226_6_, 
    indicators11_.type as type226_6_, 
    indicatord12_.id as id227_7_, 
    indicatord12_.created_on as created2_227_7_, 
    indicatord12_.updated_on as updated3_227_7_, 
    indicatord12_.version as version227_7_, 
    indicatord12_.code as code227_7_, 
    indicatord12_.descrip as descrip227_7_, 
    indicatord12_.format as format227_7_, 
    indicatord12_.name as name227_7_, 
    indicatord12_.numberformat as numberfo9_227_7_, 
    stock13_.id as id232_8_, 
    stock13_.created_on as created2_232_8_, 
    stock13_.updated_on as updated3_232_8_, 
    stock13_.version as version232_8_, 
    stock13_.autoupdate as autoupdate232_8_, 
    stock13_.bloomberg as bloomberg232_8_, 
    stock13_.currency_id as currency19_232_8_, 
    stock13_.cusip as cusip232_8_, 
    stock13_.disabled as disabled232_8_, 
    stock13_.exchange_id as exchange20_232_8_, 
    stock13_.isin as isin232_8_, 
    stock13_.name as name232_8_, 
    stock13_.price_composition as price11_232_8_, 
    stock13_.region_id as region21_232_8_, 
    stock13_.reuters as reuters232_8_, 
    stock13_.sedol as sedol232_8_, 
    stock13_.status_message_last_update as status14_232_8_, 
    stock13_.status_message_severity as status15_232_8_, 
    stock13_.status_message_text as status16_232_8_, 
    stock13_.ticker as ticker232_8_, 
    stock13_.trading_days_id as trading22_232_8_, 
    stock13_.type as type232_8_, 
    stockregio14_.id as id218_9_, 
    stockregio14_.created_on as created3_218_9_, 
    stockregio14_.updated_on as updated4_218_9_, 
    stockregio14_.version as version218_9_, 
    stockregio14_.code as code218_9_, 
    stockregio14_.name as name218_9_, 
    stockregio14_.group_id as group9_218_9_, 
    stockregio14_.type as type218_9_, 
    group15_.id as id223_10_, 
    group15_.created_on as created3_223_10_, 
    group15_.updated_on as updated4_223_10_, 
    group15_.version as version223_10_, 
    group15_.active as active223_10_, 
    group15_.alt_name as alt7_223_10_, 
    group15_.code as code223_10_, 
    group15_.locked as locked223_10_, 
    group15_.name as name223_10_, 
    group15_.parent_id as parent12_223_10_, 
    group15_.position as position223_10_, 
    group15_.primary_index_id as primary13_223_10_, 
    group15_.type_id as type14_223_10_, 
    group15_.kind as kind223_10_, 
    tradingday16_.id as id233_11_, 
    tradingday16_.created_on as created2_233_11_, 
    tradingday16_.updated_on as updated3_233_11_, 
    tradingday16_.version as version233_11_, 
    tradingday16_.traded_on_friday as traded5_233_11_, 
    tradingday16_.traded_on_monday as traded6_233_11_, 
    tradingday16_.traded_on_saturday as traded7_233_11_, 
    tradingday16_.traded_on_sunday as traded8_233_11_, 
    tradingday16_.traded_on_thursday as traded9_233_11_, 
    tradingday16_.traded_on_tuesday as traded10_233_11_, 
    tradingday16_.traded_on_wednesday as traded11_233_11_ 
from 
    stocks this_ 
left outer join 
    currencies currency4_ 
     on this_.currency_id=currency4_.id 
inner join 
    stocks_groups groups5_ 
     on this_.id=groups5_.stock_id 
inner join 
    groups groups_als1_ 
     on groups5_.group_id=groups_als1_.id 
inner join 
    groups parent_als2_ 
     on groups_als1_.parent_id=parent_als2_.id 
left outer join 
    stocks stock8_ 
     on groups_als1_.primary_index_id=stock8_.id 
left outer join 
    group_types grouptype9_ 
     on groups_als1_.type_id=grouptype9_.id 
left outer join 
    virtual_groups_components components10_ 
     on groups_als1_.id=components10_.virtual_group_id 
left outer join 
    indicators indicators11_ 
     on this_.id=indicators11_.stock_id 
left outer join 
    indicator_definitions indicatord12_ 
     on indicators11_.definition_id=indicatord12_.id 
left outer join 
    stocks stock13_ 
     on indicators11_.relative_id=stock13_.id 
inner join 
    regions stockregio14_ 
     on this_.region_id=stockregio14_.id 
left outer join 
    groups group15_ 
     on stockregio14_.group_id=group15_.id 
inner join 
    stock_trading_days tradingday16_ 
     on this_.trading_days_id=tradingday16_.id 
where 
    (
     groups_als1_.id in (
      208, 193, 224, 1745, 216, 1746, 1793, 218, 1747, 223, 204, 203, 209, 217, 1547, 1326, 127, 1744, 210, 212, 202, 1325, 2051, 215, 185, 1720, 197, 1721, 205, 1749, 194, 211, 195, 206, 1323, 184, 213, 220, 201, 207, 219, 1748, 196, 1071, 200 
     ) 
    ) 
order by 
    parent_als2_.position asc, 
    groups_als1_.position asc, 
    this_.name asc; 

我從粘貼爲CSV解釋的結果,因爲我不知道在提出它的任何其他方式更容易工作與格式。

的輸出解釋:

"id","select_type","table","type","possible_keys","key","key_len","ref","rows","Extra" 
1,"SIMPLE","groups_als1_","range","PRIMARY,FKB63DD9D428E54565","PRIMARY","8","",45,"Using where; Using temporary; Using filesort" 
1,"SIMPLE","parent_als2_","eq_ref","PRIMARY","PRIMARY","8","pr2.groups_als1_.parent_id",1,"" 
1,"SIMPLE","stock8_","eq_ref","PRIMARY","PRIMARY","8","pr2.groups_als1_.primary_index_id",1,"" 
1,"SIMPLE","grouptype9_","eq_ref","PRIMARY","PRIMARY","8","pr2.groups_als1_.type_id",1,"" 
1,"SIMPLE","components10_","ref","FK91F4CE2D598958ED","FK91F4CE2D598958ED","8","pr2.groups_als1_.id",1,"" 
1,"SIMPLE","groups5_","ref","PRIMARY,FKA35A80369A4E438E,FKA35A8036A0A8A367,FKA35A8036CBAD0B70","FKA35A8036CBAD0B70","8","pr2.groups_als1_.id",4,"Using index" 
1,"SIMPLE","tradingday16_","ALL","PRIMARY","","","",2,"Using join buffer" 
1,"SIMPLE","this_","eq_ref","PRIMARY,FKCAD3EC1D1A5585AA,FKCAD3EC1DE15DC635","PRIMARY","8","pr2.groups5_.stock_id",1,"Using where" 
1,"SIMPLE","currency4_","eq_ref","PRIMARY","PRIMARY","8","pr2.this_.currency_id",1,"" 
1,"SIMPLE","stockregio14_","eq_ref","PRIMARY","PRIMARY","8","pr2.this_.region_id",1,"" 
1,"SIMPLE","group15_","eq_ref","PRIMARY","PRIMARY","8","pr2.stockregio14_.group_id",1,"" 
1,"SIMPLE","indicators11_","ref","FKDC680444A0A8A367","FKDC680444A0A8A367","9","pr2.groups5_.stock_id",21,"" 
1,"SIMPLE","indicatord12_","eq_ref","PRIMARY","PRIMARY","8","pr2.indicators11_.definition_id",1,"" 
1,"SIMPLE","stock13_","eq_ref","PRIMARY","PRIMARY","8","pr2.indicators11_.relative_id",1,"" 
+0

我的大腦......疼...... – knittl 2011-04-03 17:12:32

+0

這是一個很大的數據 – 2011-04-03 17:12:41

+5

基督,這是一個可怕的查詢。 13加入,你想知道爲什麼它需要一段時間? – ceejayoz 2011-04-03 17:13:45

回答

0

嘗試把你的WHERE條件作爲您的加盟條件,而不是一部分。

編輯:我不知道,如果你可以強制Hibernate做

+0

感謝您的建議,但離開是否可以強制執行hibernate,它沒有工作,我試過了查詢瀏覽器的查詢,它花了34秒。 – xburgos 2011-04-03 17:30:58

1

OK,那是一個相當大的查詢,不過,這將取決於每個表上的索引,如果你移動where子句到als1表上的連接,這應該有助於你目前所做的所有連接的母親,然後在最後說「哦,我只想要這一點」

你能確認所有的id字段有索引?

+0

讀取'EXPLAIN'輸出表明它完全正確地編入索引。 – Charles 2011-04-03 17:25:06

+0

是的,所有的都有索引,就像Charles說的那樣,沒有完整的掃描正在執行。 – xburgos 2011-04-03 17:27:17

+0

我努力閱讀csv,因爲我沒有任何東西可以輕鬆解析。..好的,另一個問題。每個表格中是否有很多條目? – BugFinder 2011-04-03 18:09:19

0

因爲這有很多JOIN操作的,你認爲這個問題是有關的指標,我建議你嘗試刪除一個接一個,每加入一個有關指標:只有

-Remove的join indicator_definitions

left outer join 
    indicator_definitions indicatord12_ 
     on indicators11_.definition_id=indicatord12_.id 

-Remove只有join stocks stock13_

left outer join 
    stocks stock13_ 
     on indicators11_.relative_id=stock13_.id 

-Remove兩個:

left outer join 
    indicator_definitions indicatord12_ 
     on indicators11_.definition_id=indicatord12_.id 
left outer join 
    stocks stock13_ 
     on indicators11_.relative_id=stock13_.id 

還有一個問題:都是LEFT JOIN的必要嗎?有些人可以轉向INNER JOIN嗎?

+0

嗨,ypercube,並感謝您的回覆。關於左連接,恐怕是在休眠,另一方面,刪除這些連接所花費的時間減少了一半,但仍然是15秒太多了。如果我將這些指標全部刪除,則查詢需要0.034秒(即使是所有這些連接),這正是我所期望的。 – xburgos 2011-04-03 18:24:17

+0

此外,我必須說,包括指標意味着查詢必須返回84,000行。 – xburgos 2011-04-03 18:25:00

+0

@Cybrid:你能在table指標上添加一個複合'(stock_id,definition_id)'並嘗試整個查詢嗎? – 2011-04-03 18:33:45

0

很難說,沒有實際的數據可用,但往往不使用全表掃描可能是問題。

如果您的選擇返回大部分表格,它應該使用全表掃描應該。從你展示的內容來看,我無法判斷這是否適用於你的案例,也不知道你是否可以控制mysql使用的join/select策略。 (像Oracle提示)

---後實際看SQL語句更新---

  • 有大量的外部連接。檢查這些實際上是必需的,即相應的hibernate屬性實際上是可空的。一些聽起來像他們實際上不可爲空

  • 組合加入三次混合。你可能可能更好的不加入他們(至少不是全部三個),但依靠延遲加載+休眠的第一級緩存。

  • 同樣可能也適用於股票

  • 如果我猜中了有一組屬於每個指標股。我不知道在oracle中是否有像mysql中的聚集表那樣的東西。這可能會有所幫助,但它可能會導致其他問題。

  • 你應該檢查的另一件事是數據庫內的緩存命中率。我再次不知道mysql,但也許它只是用盡了緩存空間,所以它必須一次又一次地將內容加載到內存中。更多的主內存和適當的數據庫配置可能會有所幫助。

+0

它必須返回一大堆表格,但不是全部,我會說整個表格的大約10%,我們存儲每個股票56個指標,因此擁有大約18,000只股票,在指標表中總共有1,080,000行,平均而言,我們的用戶加載200-500個股票(及其指標)的表格 – xburgos 2011-04-03 18:47:03

1

我只能假設每個表的「自動增量」列「ID」分別有一個索引。 此外,我將確保Stock_Groups表上GROUP_ID ... 在virtual_groups_components,在virtual_group_id 關於指標的指數,上STOCK_ID指數指數

此外,既然你有這麼多的加入組合,查詢優化器可能試圖爲你思考太多,應該先使用哪張表並得到不好的結果。我對錶格進行了排序,並將您的「組」表(別名1版本)移至頂端,因爲這是您WHERE子句的基礎。另外,我添加了條款「STRAIGHT_JOIN」,它告訴編譯器按照列出的順序運行查詢...因此將首先查詢「groups_als1_」版本,並將其應用於where,獲取最小的一組記錄會期望,然後加入所有其他查找表來獲得您的結果...顯然,替換我的「AllYourFields」的佔位符。我對結果感興趣。我之前完成了這項工作,用超過14+的查詢表對1400多萬條記錄進行數據挖掘,並在30多個小時後將查詢失敗至少於2小時(是的,檢索並整理所有記錄)。

SELECT STRAIGHT_JOIN 
     PrimaryQuery.*, 

     currency4_.id as id220_0_, 
     currency4_.created_on as created2_220_0_, 
     currency4_.updated_on as updated3_220_0_, 
     currency4_.version as version220_0_, 
     currency4_.code as code220_0_, 
     currency4_.long_name as long6_220_0_, 
     currency4_.short_name as short7_220_0_, 
     currency4_.symbol as symbol220_0_, 

     indicators11_.stock_id as stock23_15_, 
     indicators11_.id as id15_, 
     indicators11_.id as id226_6_, 
     indicators11_.created_on as created3_226_6_, 
     indicators11_.updated_on as updated4_226_6_, 
     indicators11_.version as version226_6_, 
     indicators11_.definition_id as definition22_226_6_, 
     indicators11_.stock_id as stock23_226_6_, 
     indicators11_.dbl_delta1 as dbl6_226_6_, 
     indicators11_.dbl_value1 as dbl7_226_6_, 
     indicators11_.bool_delta1 as bool8_226_6_, 
     indicators11_.bool_value1 as bool9_226_6_, 
     indicators11_.bool_delta2 as bool10_226_6_, 
     indicators11_.bool_value2 as bool11_226_6_, 
     indicators11_.int_delta1 as int12_226_6_, 
     indicators11_.int_value1 as int13_226_6_, 
     indicators11_.dbl_delta2 as dbl14_226_6_, 
     indicators11_.dbl_value2 as dbl15_226_6_, 
     indicators11_.dbl_delta3 as dbl16_226_6_, 
     indicators11_.dbl_value3 as dbl17_226_6_, 
     indicators11_.date_set as date18_226_6_, 
     indicators11_.relative_id as relative24_226_6_, 
     indicators11_.is_support as is19_226_6_, 
     indicators11_.int_delta2 as int20_226_6_, 
     indicators11_.int_value2 as int21_226_6_, 
     indicators11_.type as type226_6_, 

     indicatord12_.id as id227_7_, 
     indicatord12_.created_on as created2_227_7_, 
     indicatord12_.updated_on as updated3_227_7_, 
     indicatord12_.version as version227_7_, 
     indicatord12_.code as code227_7_, 
     indicatord12_.descrip as descrip227_7_, 
     indicatord12_.format as format227_7_, 
     indicatord12_.name as name227_7_, 
     indicatord12_.numberformat as numberfo9_227_7_, 

     stock13_.id as id232_8_, 
     stock13_.created_on as created2_232_8_, 
     stock13_.updated_on as updated3_232_8_, 
     stock13_.version as version232_8_, 
     stock13_.autoupdate as autoupdate232_8_, 
     stock13_.bloomberg as bloomberg232_8_, 
     stock13_.currency_id as currency19_232_8_, 
     stock13_.cusip as cusip232_8_, 
     stock13_.disabled as disabled232_8_, 
     stock13_.exchange_id as exchange20_232_8_, 
     stock13_.isin as isin232_8_, 
     stock13_.name as name232_8_, 
     stock13_.price_composition as price11_232_8_, 
     stock13_.region_id as region21_232_8_, 
     stock13_.reuters as reuters232_8_, 
     stock13_.sedol as sedol232_8_, 
     stock13_.status_message_last_update as status14_232_8_, 
     stock13_.status_message_severity as status15_232_8_, 
     stock13_.status_message_text as status16_232_8_, 
     stock13_.ticker as ticker232_8_, 
     stock13_.trading_days_id as trading22_232_8_, 
     stock13_.type as type232_8_, 

     group15_.id as id223_10_, 
     group15_.created_on as created3_223_10_, 
     group15_.updated_on as updated4_223_10_, 
     group15_.version as version223_10_, 
     group15_.active as active223_10_, 
     group15_.alt_name as alt7_223_10_, 
     group15_.code as code223_10_, 
     group15_.locked as locked223_10_, 
     group15_.name as name223_10_, 
     group15_.parent_id as parent12_223_10_, 
     group15_.position as position223_10_, 
     group15_.primary_index_id as primary13_223_10_, 
     group15_.type_id as type14_223_10_, 
     group15_.kind as kind223_10_ 

    FROM 
     (SELECT STRAIGHT_JOIN 
       groups_als1_.id as group2_14_, 
       groups_als1_.id as id223_1_, 
       groups_als1_.created_on as created3_223_1_, 
       groups_als1_.updated_on as updated4_223_1_, 
       groups_als1_.version as version223_1_, 
       groups_als1_.active as active223_1_, 
       groups_als1_.alt_name as alt7_223_1_, 
       groups_als1_.code as code223_1_, 
       groups_als1_.locked as locked223_1_, 
       groups_als1_.name as name223_1_, 
       groups_als1_.parent_id as parent12_223_1_, 
       groups_als1_.position as position223_1_, 
       groups_als1_.primary_index_id as primary13_223_1_, 
       groups_als1_.type_id as type14_223_1_, 
       groups_als1_.kind as kind223_1_, 

       parent_als2_.id as id223_2_, 
       parent_als2_.created_on as created3_223_2_, 
       parent_als2_.updated_on as updated4_223_2_, 
       parent_als2_.version as version223_2_, 
       parent_als2_.active as active223_2_, 
       parent_als2_.alt_name as alt7_223_2_, 
       parent_als2_.code as code223_2_, 
       parent_als2_.locked as locked223_2_, 
       parent_als2_.name as name223_2_, 
       parent_als2_.parent_id as parent12_223_2_, 
       parent_als2_.position as position223_2_, 
       parent_als2_.primary_index_id as primary13_223_2_, 
       parent_als2_.type_id as type14_223_2_, 
       parent_als2_.kind as kind223_2_, 

       groups5_.stock_id as stock1_14_, 

       this_.id as id232_12_, 
       this_.created_on as created2_232_12_, 
       this_.updated_on as updated3_232_12_, 
       this_.version as version232_12_, 
       this_.autoupdate as autoupdate232_12_, 
       this_.bloomberg as bloomberg232_12_, 
       this_.currency_id as currency19_232_12_, 
       this_.cusip as cusip232_12_, 
       this_.disabled as disabled232_12_, 
       this_.exchange_id as exchange20_232_12_, 
       this_.isin as isin232_12_, 
       this_.name as name232_12_, 
       this_.price_composition as price11_232_12_, 
       this_.region_id as region21_232_12_, 
       this_.reuters as reuters232_12_, 
       this_.sedol as sedol232_12_, 
       this_.status_message_last_update as status14_232_12_, 
       this_.status_message_severity as status15_232_12_, 
       this_.status_message_text as status16_232_12_, 
       this_.ticker as ticker232_12_, 
       this_.trading_days_id as trading22_232_12_, 
       this_.type as type232_12_, 

       stockregio14_.id as id218_9_, 
       stockregio14_.created_on as created3_218_9_, 
       stockregio14_.updated_on as updated4_218_9_, 
       stockregio14_.version as version218_9_, 
       stockregio14_.code as code218_9_, 
       stockregio14_.name as name218_9_, 
       stockregio14_.group_id as group9_218_9_, 
       stockregio14_.type as type218_9_, 

       tradingday16_.id as id233_11_, 
       tradingday16_.created_on as created2_233_11_, 
       tradingday16_.updated_on as updated3_233_11_, 
       tradingday16_.version as version233_11_, 
       tradingday16_.traded_on_friday as traded5_233_11_, 
       tradingday16_.traded_on_monday as traded6_233_11_, 
       tradingday16_.traded_on_saturday as traded7_233_11_, 
       tradingday16_.traded_on_sunday as traded8_233_11_, 
       tradingday16_.traded_on_thursday as traded9_233_11_, 
       tradingday16_.traded_on_tuesday as traded10_233_11_, 
       tradingday16_.traded_on_wednesday as traded11_233_11_, 

       stock8_.id as id232_3_, 
       stock8_.created_on as created2_232_3_, 
       stock8_.updated_on as updated3_232_3_, 
       stock8_.version as version232_3_, 
       stock8_.autoupdate as autoupdate232_3_, 
       stock8_.bloomberg as bloomberg232_3_, 
       stock8_.currency_id as currency19_232_3_, 
       stock8_.cusip as cusip232_3_, 
       stock8_.disabled as disabled232_3_, 
       stock8_.exchange_id as exchange20_232_3_, 
       stock8_.isin as isin232_3_, 
       stock8_.name as name232_3_, 
       stock8_.price_composition as price11_232_3_, 
       stock8_.region_id as region21_232_3_, 
       stock8_.reuters as reuters232_3_, 
       stock8_.sedol as sedol232_3_, 
       stock8_.status_message_last_update as status14_232_3_, 
       stock8_.status_message_severity as status15_232_3_, 
       stock8_.status_message_text as status16_232_3_, 
       stock8_.ticker as ticker232_3_, 
       stock8_.trading_days_id as trading22_232_3_, 
       stock8_.type as type232_3_, 

       grouptype9_.id as id224_4_, 
       grouptype9_.created_on as created2_224_4_, 
       grouptype9_.updated_on as updated3_224_4_, 
       grouptype9_.version as version224_4_, 
       grouptype9_.name as name224_4_, 

       components10_.virtual_group_id as virtual2_14_, 
       components10_.group_id as group1_14_, 
       components10_.group_id as group1_225_5_, 
       components10_.virtual_group_id as virtual2_225_5_, 
       components10_.operator as operator225_5_, 
       components10_.operator_name as operator4_225_5_, 
       components10_.sequence as sequence225_5_ 

      from 
       groups groups_als1_ 
        join groups parent_als2_ 
         on groups_als1_.parent_id = parent_als2_.id 

        join stocks_groups groups5_ 
         on groups_als1_.id = groups5_.group_id 

        join stocks this_ 
         on groups5_.stock_id = this_.id 

        join regions stockregio14_ 
         on this_.region_id = stockregio14_.id 

        join stock_trading_days tradingday16_ 
         on this_.trading_days_id = tradingday16_.id 

        left outer join stocks stock8_ 
         on groups_als1_.primary_index_id = stock8_.id 

        left outer join group_types grouptype9_ 
         on groups_als1_.type_id=grouptype9_.id 

        left outer join virtual_groups_components components10_ 
         on groups_als1_.id=components10_.virtual_group_id 

      where 
       groups_als1_.id in (208, 193, 224, 1745, 216, 1746, 
        1793, 218, 1747, 223, 204, 203, 209, 217, 1547, 
        1326, 127, 1744, 210, 212, 202, 1325, 2051, 215, 
        185, 1720, 197, 1721, 205, 1749, 194, 211, 195, 
        206, 1323, 184, 213, 220, 201, 207, 219, 1748, 
        196, 1071, 200) 
      order by 
       parent_als2_.position asc, 
       groups_als1_.position asc, 
       this_.name asc;) PrimaryQuery 

     left outer join currencies currency4_ 
      on PrimaryQuery.currency19_232_12_ = currency4_.id 

     left outer join indicators indicators11_ 
      on PrimaryQuery.id232_12_ = indicators11_.stock_id 

      left outer join indicator_definitions indicatord12_ 
       on indicators11_.definition_id = indicatord12_.id 

      left outer join stocks stock13_ 
       on indicators11_.relative_id = stock13_.id 

     join regions stockregio14_ 
      on PrimaryQuery.region21_232_12_ = stockregio14_.id 

      left outer join groups group15_ 
       on stockregio14_.group_id = group15_.id 

     left outer join stocks stock8_ 
      on PrimaryQuery.primary13_223_1_ = stock8_.id 
+0

哇,非常感謝!我剛剛嘗試過,所做的修改使其速度更快,大約25現在我注意到了一些東西,在查詢瀏覽器中,我在左下角看到2次記錄,一次讀取0.7秒,另一次在括號25秒之間,我想知道如果第一次是mysql需要實際獲取數據的時間,其餘的是磁盤I/O。 – xburgos 2011-04-03 21:03:34

+0

@Cybrid,你自己的「Stock_ID」上的指標表上是否有索引...不是多個字段的複合索引? – DRapp 2011-04-04 00:23:39

+0

是的,因爲事實上mysql強制你爲每個外鍵創建一個索引。 – xburgos 2011-04-04 10:43:06