2013-06-23 40 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關鍵字的註釋。 –