我有一個存儲導入信息的數據庫表。爲簡單起見,它是這樣的:mysql搜索查詢
CREATE TABLE `data_import` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`payee` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `payee` (`payee`)
)
我也有存儲進口規則的表:
CREATE TABLE `import_rules` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`search` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `search` (`search`)
)
的想法是,每個進口交易,查詢需要嘗試找到一個匹配規則 - 這個匹配是在data_import.payee和import_rules.seach字段上完成的。因爲這些都是varchar字段,所以我對它們進行了索引,希望能夠加快查詢速度。
這是我到目前爲止,這似乎工作正常。
SELECT i.id, i.payee, i.amount, i.posted r.id, r.search
FROM import_data id
LEFT JOIN import_rules ir on i.payee = ir.search
因此,舉例來說,可以說,我們有「可口可樂」的import_rules.search記錄,「可口可樂」的import_data.payee記錄。然後我們得到一場比賽。
現在,讓我們說,我們希望使這一點更加靈活,並且使得即使搜索與收款人的一部分相匹配,我們也會得到一個匹配。因此,import_rules.search ='cola'和import_data.payee ='coca cola'仍然會導致匹配。
我的理解是,各種「LIKE'%search%'」表現不佳。我在innodb上運行,所以不知道是否myisam的文本搜索替代方案是一個選項。如果需要,我可以切換一張桌子。
您有問題想問一下嗎? – 2010-11-19 23:22:17
呃,親自,我在這裏是爲了聲望.. – 2010-11-19 23:57:49
對不起,我明顯沒有說過這句話。鑑於我現在正在加入(潛在)部分匹配而不是完整字符串,我該如何構建查詢。並且仍然保持性能。 – JonoB 2010-11-20 16:53:35