使用group_concat标记查询

el_*_*_le 6 mysql query-optimization

使用数据库模式来标记此问题的已接受答案是否可以使用可处理大量数据的group_concat进行查询?我需要为所有标记为标记x的项目获取带有标签的项目.使用具有约.5百万个标签的group_concat的查询在> 15秒时非常慢.没有group_concat(没有标签的项目)它是~0.05秒.

作为一个附带问题,SO如何解决这个问题?

egg*_*yal 5

这可能是一个糟糕的索引策略的情况.调整您链接的问题的接受答案中显示的架构:

CREATE Table Items (
  Item_ID    SERIAL,
  Item_Title VARCHAR(255),
  Content    TEXT
) ENGINE=InnoDB;

CREATE TABLE Tags (
  Tag_ID     SERIAL,
  Tag_Title  VARCHAR(255)
) ENGINE=InnoDB;

CREATE TABLE Items_Tags (
  Item_ID    BIGINT UNSIGNED REFERENCES Items (Item_ID),
  Tag_ID     BIGINT UNSIGNED REFERENCES Tags  ( Tag_ID),
  PRIMARY KEY (Item_ID, Tag_ID)
) ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)

注意:

  • MySQL的SERIAL数据类型BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE是索引的别名,因此被索引;

  • Items_Tags在外键列上创建索引时定义外键约束.