EF6的MySQL子查询性能问题
我遇到了一个问题,MySQL运行以下查询需要30秒以上的时间。扁平化子查询可以简化问题。不幸的是,实体框架(或MySql.Data.Entity实现)也产生了糟糕的投影 我是否需要删除所有EF投影,或者是否有其他选项可供我选择 版本:EF6的MySQL子查询性能问题,mysql,entity-framework-6,database-performance,Mysql,Entity Framework 6,Database Performance,我遇到了一个问题,MySQL运行以下查询需要30秒以上的时间。扁平化子查询可以简化问题。不幸的是,实体框架(或MySql.Data.Entity实现)也产生了糟糕的投影 我是否需要删除所有EF投影,或者是否有其他选项可供我选择 版本: 实体框架v6.1.3 MySQL v5.7.15 MySql.Data.Entity v6.9.9 SQL: 作为参考,以下等效查询在一秒钟内进行: select * from Journals where `GeneralLedgerAccountId`
- 实体框架v6.1.3
- MySQL v5.7.15
- MySql.Data.Entity v6.9.9
select * from Journals
where `GeneralLedgerAccountId` = 'abc123'
and `Synchronized` = 1 limit 1
查询计划:
{
"query_block": {
"select_id": 1,
"cost_info": {
"query_cost": "55155.11"
},
"ordering_operation": {
"using_filesort": true,
"table": {
"table_name": "Journals",
"access_type": "ref",
"possible_keys": [
"PRIMARY"
],
"key": "PRIMARY",
"used_key_parts": [
"GeneralLedgerAccountId"
],
"key_length": "98",
"ref": [
"const"
],
"rows_examined_per_scan": 273272,
"rows_produced_per_join": 27327,
"filtered": "10.00",
"cost_info": {
"read_cost": "500.71",
"eval_cost": "5465.44",
"prefix_cost": "55155.11",
"data_read_per_join": "9M"
},
"used_columns": [
"GeneralLedgerAccountId",
"Id",
"Number",
"Synchronized"
],
"attached_condition": "((`mydb`.`journals`.`GeneralLedgerAccountId` <=> 'abc123') and (`mydb`.`journals`.`Synchronized` = 1))"
}
}
}
}
{
“查询块”:{
“选择id”:1,
“成本信息”:{
“查询成本”:“55155.11”
},
“订购操作”:{
“使用_filesort”:true,
“表格”:{
“表格名称”:“日记账”,
“访问类型”:“ref”,
“可能的_键”:[
“主要”
],
“密钥”:“主要”,
“使用过的关键部件”:[
“GeneralEdgeracCountId”
],
“密钥长度”:“98”,
“参考”:[
“常数”
],
“每次扫描检查的行数”:273272,
“每联接产生的行数”:27327,
“过滤”:“10.00”,
“成本信息”:{
“阅读成本”:“500.71”,
“评估成本”:“5465.44”,
“前缀成本”:“55155.11”,
“每个联接的数据读取”:“9M”
},
“已用列”:[
“GeneralEdgeracCountId”,
“身份证”,
“数字”,
“已同步”
],
“附加条件”:“(`mydb`.`journals`.`GeneralLedgerAccountId`'abc123')和(`mydb`.`journals`.`Synchronized`=1”)”
}
}
}
}
我也面临同样的问题,你找到解决方案了吗?你有什么索引?这两个查询是不等价的——省略ORDER BY
会使限制变得不可预测,并加快查询速度。
{
"query_block": {
"select_id": 1,
"cost_info": {
"query_cost": "55155.11"
},
"ordering_operation": {
"using_filesort": true,
"table": {
"table_name": "Journals",
"access_type": "ref",
"possible_keys": [
"PRIMARY"
],
"key": "PRIMARY",
"used_key_parts": [
"GeneralLedgerAccountId"
],
"key_length": "98",
"ref": [
"const"
],
"rows_examined_per_scan": 273272,
"rows_produced_per_join": 27327,
"filtered": "10.00",
"cost_info": {
"read_cost": "500.71",
"eval_cost": "5465.44",
"prefix_cost": "55155.11",
"data_read_per_join": "9M"
},
"used_columns": [
"GeneralLedgerAccountId",
"Id",
"Number",
"Synchronized"
],
"attached_condition": "((`mydb`.`journals`.`GeneralLedgerAccountId` <=> 'abc123') and (`mydb`.`journals`.`Synchronized` = 1))"
}
}
}
}