2012-03-01 34 views
0

我有三个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); 

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

+0

在JOIN和WHERE子句中使用的列上添加索引 – scibuff 2012-03-01 09:28:02

回答

0

您需要添加适当的索引以及您需要进行查询以使其具有较低的温度。您可以更改连接顺序并解释它以调试您的查询以创建最佳的查询。