gpt4 book ai didi

mysql - 复杂查询耗时 30 秒,无全表扫描

转载 作者:行者123 更新时间:2023-11-29 02:35:37 26 4
gpt4 key购买 nike

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

我们有完整的股票、stocks_groups、指标、indicator_definition(加上其他不那么相关的表,如国家、交易所...)。 stocks 表包含大约 18000 行,groups 表大约有 3000 行,indicators 表有超过 710,000 行。所有表都使用自动生成的 id 列,我在由(id、stock_id 和 definition_id)组成的指标表中创建了一个额外的索引。如果我从查询中删除指标,它会在 0.030 秒内执行,这是我所期望的,所以我的猜测是那里一定有问题,但我对数据库的了解有限,我一直在寻找一个解决方案。

任何帮助将不胜感激,

提前致谢

泽比尔。

查询:

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;

我将 explain 的结果粘贴为 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,""

最佳答案

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

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

关于mysql - 复杂查询耗时 30 秒,无全表扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5531112/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com