以下のクエリを書くことができました。これはうまく機能します。私の問題は、それを何度も使用していて、独自のビューが必要だと思うことですが、phpmyadmin でビューを作成すると、以前は 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`
ビューをより効率的にする方法についてのアイデアはありますか?
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