私は2つのテーブルを持っています:
辞書- 約 36,000 語を収録
CREATE TABLE IF NOT EXISTS `dictionary` (
`word` varchar(255) NOT NULL,
PRIMARY KEY (`word`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
データ- 約 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 ステートメントを指定した on 句を使用して、上記と同様のことを試しました。