【发布时间】:2011-12-31 03:36:58
【问题描述】:
我有一个类似于下面简化的数据库。我需要检索列:col8、col9、col10、col11、col12(我圈出的那些
目前,我正在使用左连接来连接每个表,但这会导致查询花费很长时间(有很多记录)。分析后,最大的影响是写入 tmp 表。
我将结果限制为 24,但由于左连接,它仍在将数千条记录复制到 tmp 表中。
http://oberto.co.nz/demo/assets/db2.jpeg
这是否可以优化为仍然使用 pk 连接从每个表中检索带圆圈的列?
谢谢。
【问题讨论】:
-
好形象;-) 但是我们仍然对您的表和索引一无所知。我想说的是,所有用于连接表的字段(ON 子句)都应该使用主键、唯一键或仅使用简单索引进行索引。
-
哈哈,谢谢。我刚刚更新它以使其希望更清晰。每个表的第一列是主键,每个连接表都有一个对应的外键。
-
@Devart - +1。如果正确应用了索引,则查询应该很快,除非涉及其他内容(order by?group by?有?)。左连接的性能并不比内连接差。我们能否看到您正在使用的查询以及哪些索引在哪里?
-
@Jarrod:sample code 在解决编程问题时比图片更有帮助。请发布示例表架构(
CREATE语句)、示例数据(如INSERT语句)和您尝试优化的查询。 -
同意别人,你的问题还是有点含糊。到目前为止,我认为,你只能有猜测,没有答案。当然,您可能很满意收到猜测,但人们可能不满意我做出猜测。无论如何,
B和E的每个A的行是否可以有多个匹配项?如果是这种情况,您可能会得到很多重复。
标签: mysql optimization query-optimization left-join