如何查询三个mysql连接表?

时间:2012-03-01 09:24:50

标签: mysql join

我有三个mysql表:

  1. * page_category * table
  2. 
        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 * table
    2. 
          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 * table
      2. 
            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);
        

        结果显示在很长一段时间内。我在编写查询时错了吗?

1 个答案:

答案 0 :(得分:0)

您需要添加正确的索引以及进行查询以使其具有较少的临时值。您可以更改联接的顺序并解释它以调试您的查询到最好的一个。