我遇到了一个查询“太长”。该查询在10个左右表格之间有50多个左连接。为了简要概述数据库模型,连接的表格是存储特定数据类型(例如:date_fields,integer_fields,text_fields等)的数据的表格,每个表格都有一个值列,一个“数据字段”和一个票证号码。该查询是基于“票证”与其“数据字段”之间的关联表以编程方式构建的。优化在同一个表上使用多个左连接的查询
的加入语句看起来类似以下内容:
...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)
在使用上查询说明显示如下:
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
我可以采取什么方向来调整这个查询?所有指标似乎都已到位。也许应该减少t表(门票)行号(2871)。剩下多少个连接太多?数据字段表是否应该只加入一次,然后为每个数据查询所需的数据?
伟大的回应比尔!我不能在不改变模式的情况下想到一个好的解决方案,所以我不断重新加载这个问题,看看别人会说些什么。我喜欢你的解决方案。 – 2010-10-11 17:32:09
同意。感谢您的信息和解决方案! – 2010-10-12 17:29:56