2011-04-03 69 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