Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
EF6的MySQL子查询性能问题_Mysql_Entity Framework 6_Database Performance - Fatal编程技术网

EF6的MySQL子查询性能问题

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`

我遇到了一个问题,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` = '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))"
      }
    }
  }
}