2013-06-23 39 views
1

我有两个MYSQL表,A和B.表A有44,902行,而表B有109,583行。 我想比较两个表中的两列,并返回表A中找到匹配的行。我的,不成功的查询是:Mysql查询需要300多秒

SELECT pool.domain_name FROM `pool`, `en_dict` WHERE pool.domain_string = en_dict.word 

和另一种变体:

SELECT a.domain_name FROM `pool` as a inner join en_dict as b on a.domain_string = b.word 

这两种解决方案falied在300秒钟后将返回任何值。

我该怎么做才能减少找到匹配的时间?

P.S.我试图在查询结尾添加一个LIMIT,并设法在245秒内显示10个结果。

编辑:我的表结构如下:

-- 
-- Table structure for table `en_dict` 
-- 

CREATE TABLE `en_dict` (
    `word_id` bigint(20) unsigned zerofill NOT NULL AUTO_INCREMENT, 
    `word` varchar(35) NOT NULL, 
    PRIMARY KEY (`word_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=109584 ; 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `pool` 
-- 

CREATE TABLE `pool` (
    `domain_id` bigint(20) unsigned zerofill NOT NULL AUTO_INCREMENT, 
    `domain_name` varchar(100) NOT NULL, 
    `domain_tld` varchar(10) NOT NULL, 
    `domain_string` varchar(90) NOT NULL, 
    `domain_lenght` int(2) NOT NULL, 
    `domain_expiretime` date NOT NULL, 
    PRIMARY KEY (`domain_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=44903 ; 
+0

你对你的表定义键? –

+0

请列出您的表格结构.. –

+2

您是否编入了'pool.domain_string'和'en_dict.word'? – Mischa

回答

2

尝试在你的表的相关列添加索引:

ALTER TABLE `pool` ADD INDEX `domain_string_idx` (`domain_string`); 
ALTER TABLE `en_dict` ADD INDEX `word_idx` (`word`); 
+0

它就像一个魅力!非常非常感谢你! –

+0

不客气! – Mischa

+0

我加了一点关于EXPLAIN关键字的注释。 –