我成功编写了以下查询,效果很好。我的问题是我多次使用它,我认为它有自己的 View ,但是当我让 phpmyadmin 为我创建 View 时,过去需要 0.0060 秒的查询现在需要 6.2094 秒。
我的查询:
SELECT tr.uuid, tr.creator,
(
SELECT
GROUP_CONCAT(name)
FROM tags as t1
WHERE t1.uuid = tr.uuid and t1.type = "name"
GROUP BY t1.uuid
) as names,
(
SELECT GROUP_CONCAT(name)
FROM tags as t2
WHERE t2.uuid = tr.uuid and t2.type = "tag"
GROUP BY t2.uuid
) as tags
FROM `tags` as tr
phpMyAdmin 的转换:
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `textagname` AS
select
`tr`.`uuid` AS `uuid`,
`tr`.`creator` AS `creator`,
(
select group_concat(`t1`.`name` separator ',') AS `GROUP_CONCAT(name)`
from `tags` `t1`
where ((`t1`.`uuid` = `tr`.`uuid`) and (`t1`.`type` = 'name'))
group by `t1`.`uuid`
) AS `names`,
(
select group_concat(`t2`.`name` separator ',') AS `GROUP_CONCAT(name)`
from `tags` `t2`
where ((`t2`.`uuid` = `tr`.`uuid`) and (`t2`.`type` = 'tag'))
group by `t2`.`uuid`
) AS `tags`
from `tags` `tr`
关于如何让我的 View 更有效率,有什么想法吗?
ps:下面是tags
表结构:
Column Type Null Default Comments
------- ----------- ---- ------- ------------------
uuid varchar(36) No key of texture
name varchar(64) No tag name
creator varchar(36) Yes NULL creator of the tag
type varchar(36) No name, or tag
最佳答案
无法真正解释为什么您的查询在由 phpMyAdmin 转换为 View 时变得更慢,但我会改为尝试以下查询:
SELECT
uuid,
creator,
GROUP_CONCAT(CASE type WHEN 'name' THEN name END) AS names,
GROUP_CONCAT(CASE type WHEN 'tag' THEN name END) AS tags
FROM tags
WHERE type IN ('name', 'tag')
GROUP BY
uuid,
creator
关于mysql - 有没有办法重写此查询以作为 SQL View 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10373352/