小编Dan*_*n G的帖子

优化在同一个表上使用多个左连接的查询

我遇到了一个"太长"的查询.该查询在10个左右的表之间有50多个左连接.为了简要概述数据库模型,连接的表是存储特定数据类型数据的表(例如:date_fields,integer_fields,text_fields等),每个表都有一个值列,一个"datafield"id,和票证ID.查询是基于"票证"及其"数据字段"之间的关联表以编程方式构建的.

join语句如下所示:

...FROM tickets t
LEFT JOIN ticket_text_fields t001 ON(t.id=t001.ticket_id AND t001.textfield_id=7)
...
LEFT JOIN ticket_date_fields t056 ON(t.id=t056.ticket_id AND t056.datafield_id=434)
Run Code Online (Sandbox Code Playgroud)

在查询上使用说明时显示以下内容:

1   SIMPLE   t       ref   idx_dataset_id                   idx_dataset_id  5   const   2871   Using where; Using temporary; Using filesort
1   SIMPLE   t001   ref   idx_ticket_id,idx_datafield_id   idx_ticket_id   5   t.id   5   
... 
1   SIMPLE   t056   ref   idx_ticket_id,idx_datafield_id   idx_ticket_id   5   t.id   8
Run Code Online (Sandbox Code Playgroud)

我可以采取什么方向来调整此查询?所有索引似乎都已到位.也许应该减少t表(票)行号(2871).有多少左连接太多了?数据域表是否应仅连接一次,然后查询每个所需的数据?

sql optimization left-join sql-execution-plan

4
推荐指数
1
解决办法
4531
查看次数

标签 统计

left-join ×1

optimization ×1

sql ×1

sql-execution-plan ×1