复杂查询需要30秒,没有全表扫描

时间:2011-04-03 17:10:28

标签: mysql performance hibernate

我在32位机器上运行MySQL 5.1,我正在使用Hibernate标准生成下面的查询;出于某种原因,我不明白它需要30秒才能执行,即使根据“解释”所说的,没有执行全表扫描。

我们有一个股票,股票,群体,指标,指标_定义(以及其他不那么相关的表格,如国家,交易所......)。库存表包含大约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,""

5 个答案:

答案 0 :(得分:1)

好吧,这是一个非常大的查询,但是,它将取决于每个表上的索引,如果你将where子句移动到als1表上的连接,这应该有帮助,因为目前你正在做的母亲所有加入,然后在最后说“哦,我只想要这一点”

你能否确认所有id字段都有索引?

答案 1 :(得分:1)

我只能ASSUME每个表的“自动增量”列“ID”分别有一个索引。 另外,我会确保Stock_Groups表在Group_ID上有索引... 在virtual_groups_components上,virtual_group_id上的索引 ON指标,stock_id指数

此外,由于您有这么多的连接组合,查询优化器可能会尝试过多地考虑您应该首先使用哪个表并获得错误的结果。我已经对表格进行了排序,并将“Groups”表(别名1版本)移到了顶部,因为这是WHERE子句的基础。另外,我添加了“STRAIGHT_JOIN”子句,告诉编译器按照列出的确切顺序运行查询...因此首先查询“groups_als1_”版本,应用where,获取最小的记录集你我希望,然后加入所有其他查找表以获得结果......显然,替换我的占位符“AllYourFields”。我对结果感兴趣。我之前已经完成了这项工作,使用了超过14个查找表的1400多万条记录的gov't数据挖掘,并且在30多个小时之后将查询失败到不到2小时(是的,检索并排序所有记录)。 / p>

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 

答案 2 :(得分:0)

尝试将WHERE条件作为JOIN条件的一部分。

编辑:我不知道你是否可以强迫Hibernate这样做

答案 3 :(得分:0)

由于这有很多JOIN操作,并且您认为问题与指标有关,我建议您尝试逐个删除每个与指标相关的连接:

- 只删除join indicator_definitions

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

- 只删除join stocks stock13_

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

- 删除两者:

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 s?

答案 4 :(得分:0)

如果没有可用的实际数据,很难说,但通常不使用全表扫描可能是问题所在。

如果您的选择返回表格的大部分内容,应该使用全表格扫描。从您展示的内容中我无法判断这是否适用于您的情况,也不知道您是否可以控制mysql使用的连接/选择策略。 (与oracle提示一样)

---实际查看sql语句后更新---

  • 有很多外连接。检查这些实际上是必要的,即各自的hibernate属性实际上是可空的。听起来有些声音实际上是不可空的

  • 组合连接三次。 可能最好不要加入它们(至少不是全部三个),而是依赖延迟加载+ hibernate的第一级缓存。

  • 同样可能适用于股票

  • 如果我做对了,每个股票都有一套指标。我不知道在mysql中是否存在类似于oracle中的聚簇表。这可能会有所帮助,尽管它可能会导致其他问题。

  • 您应该检查的另一件事是数据库中的缓存命中率。我再也不知道mysql,但也许它只是用完了缓存空间所以它必须一遍又一遍地将内容加载到内存中。更多主内存和数据库的适当配置可能有所帮助。