2

以下のクエリを書くことができました。これはうまく機能します。私の問題は、それを何度も使用していて、独自のビューが必要だと思うことですが、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
4

1 に答える 1

1

phpMyAdminによってビューに変換されたときにクエリが遅くなった理由を実際に説明することはできませんが、代わりに次のクエリを試してみます。

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
于 2012-04-29T15:38:53.620 に答える