如何查询一个由三个mysql连接的表



我有三个mysql表:

  1. *page_category*表

    CREATE TABLE `page_category` (
      `id_page` VARCHAR(255) NOT NULL,
      `name` VARCHAR(255) DEFAULT NULL,
      `search_here` TEXT,
      PRIMARY KEY (`id_page`),
      FULLTEXT KEY `search` (`search_here`)
    ) ENGINE=MYISAM DEFAULT CHARSET=latin1

*page_category*表包含超过200万行的数据。

  1. *user_page*表

    CREATE TABLE `user_page` (
      `user_id` VARCHAR(255) NOT NULL,
      `id_page` VARCHAR(255) NOT NULL,
      PRIMARY KEY (`user_id`,`id_page`)
    ) ENGINE=INNODB DEFAULT CHARSET=latin1

*user_page*表包含超过1000万行的数据。

  1. *user_relationship*表

    CREATE TABLE `user_relationship` (
      `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
      `me` VARCHAR(255) DEFAULT NULL,
      `friend` VARCHAR(255) DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `me_friend` (`me`,`friend`)
    ) ENGINE=INNODB AUTO_INCREMENT=7517967 DEFAULT CHARSET=latin1

*user_relationship*表包含超过100万行的数据。

我做了一个查询:

SELECT a.id_page AS ids, b.user_id, 
a.name AS nama, c.me, 
COUNT(c.me) AS nfriend, 
GROUP_CONCAT(b.user_id SEPARATOR ',') AS friendlist
FROM
page_category a
LEFT JOIN user_page b
ON a.id_page = b.id_page
LEFT JOIN user_relationship c
ON
b.user_id = c.friend
WHERE
c.me='12' AND
MATCH(a.search_here) AGAINST('+book' IN BOOLEAN MODE);

结果显示在很长的时间内。我写这个问题错了吗?

您需要添加适当的索引,也需要进行查询,使其具有较少的临时性。您可以更改连接顺序并对其进行解释,以调试您的查询,从而获得最佳查询。

最新更新