【发布时间】:2021-03-03 10:00:47
【问题描述】:
我需要使用单个查询从多个表中获取数据,该查询提供大约 10600 个结果(行)。问题是查询需要很长时间才能执行。就像.. 很长一段时间.. 90 秒。
有什么方法可以在不添加索引的情况下改进查询?表会不断更新(插入、更新、删除的行)。
这里是查询:
SELECT
t1.ID
, t1.ref
, t1.type
, GROUP_CONCAT(DISTINCT t3.name) AS parish
, GROUP_CONCAT(DISTINCT t2.village) AS village
, GROUP_CONCAT(DISTINCT t2.code) AS code
, GROUP_CONCAT(DISTINCT t4.year) AS year
FROM table1 t1
LEFT OUTER JOIN table2 AS t2 ON t2.teade_ID = t1.ID
LEFT OUTER JOIN table3 AS t3 ON t2.parish_ID = t3.ID
LEFT OUTER JOIN table4 AS t4 ON t4.teade_ID = t1.ID
GROUP BY t1.ID, t1.ref, t1.type
ORDER BY t1.ID DESC
非常感谢任何帮助!
【问题讨论】:
-
您确定插入/更新/删除开销对您来说太多了吗?所有4张桌子都是这种情况吗?人们通常会高估这种影响,尤其是在每晚/每周维护索引时。如果您确定,为了得到一个好的答案,您可能需要添加有关相对表大小、列数和类型的信息。
-
您确定不想使用或添加索引吗?因为这就是构建索引的目的。尤其是当您拥有大量数据时。
-
GROUP_CONCAT()字段的输出将是多长时间?如果它们变得很长(对于那些 10600 行),那么您可能会遇到内存问题(没有足够的缓存来将完整的输出保存在内存中,这导致需要临时表......) -
如果要进行 JOIN,则需要索引。
-
知道为什么当我尝试创建索引时会得到结果“MySQL 返回了一个空结果集(即零行)。”?空结果集。
标签: mysql sql performance