專欄中,我有2個表中選擇行:其中類似字典裏的單詞
詞典 - 包含大約36000字
CREATE TABLE IF NOT EXISTS `dictionary` (
`word` varchar(255) NOT NULL,
PRIMARY KEY (`word`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
DATAS - 大約100,000行
CREATE TABLE IF NOT EXISTS `datas` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`hash` varchar(32) NOT NULL,
`data` varchar(255) NOT NULL,
`length` int(11) NOT NULL,
`time` int(11) NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `hash` (`hash`),
KEY `data` (`data`),
KEY `length` (`length`),
KEY `time` (`time`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=105316 ;
一載想要以某種方式選擇來自datas
的所有行,其中列data
包含1個或更多的單詞。
我理解,這是一個很大的要求,就需要在每一個組合可以匹配所有這些行在一起,所以它需要的最佳優化。
我曾嘗試下面的查詢,但它只是掛起的年齡:
SELECT `datas`.*, `dictionary`.`word`
FROM `datas`, `dictionary`
WHERE `datas`.`data` LIKE CONCAT('%', `dictionary`.`word`, '%')
AND LENGTH(`dictionary`.`word`) > 3
ORDER BY `length` ASC
LIMIT 15
我也曾嘗試類似上面左連接東西,對指定的LIKE語句子句。
@eggyal:謝謝,但我嘗試過,並沒有工作。根據這篇文章的答案(http://stackoverflow.com/questions/10465758/subquery-incorrect-arguments-to-against-using-mysql),'AGAINST'必須是一個文字字符串。 – Drahcir
「即使是15行限制」也與您的查詢不相關,因爲限制只能在結果確定和排序後進行。 – Eddy
@Eddy:好的,謝謝 – Drahcir