基本上我想要做的是扭转column LIKE 'string%'
行为。请考虑以下表格:
CREATE TABLE texts (
id int not null,
txt varchar(30) not null,
primary key(id),
key `txt_idx` (txt)
) engine=InnoDB;
INSERT INTO texts VALUES(1, 'abcd');
根据B-Tree Index Characteristics,以下查询将使用txt_idx index:
SELECT txt FROM texts WHERE txt LIKE 'abc%';
现在我想要一些不同的行为。我希望在查询'abcd'
时返回'abcde'
行。目前,我一直坚持这个问题:
SELECT txt FROM texts WHERE 'abcde' LIKE CONCAT(txt, '%');
显然(通过解释证实)它没有使用任何索引,但我的直觉告诉我应该可以将特定值与索引进行比较,直至索引值长度(就像strncmp一样)。
这个的主要原因是我的域表条目巨大的表。我想选择" example.org"和" something.example.org" (但不是" else.example.org")查询" www.something.example.org"。不幸的是,拆分和执行多个查询或应用OR
条款似乎对我来说太慢了。
答案 0 :(得分:1)
我唯一能想到的就是将其转换为等效的IN
测试:
WHERE txt IN ('a', 'ab', 'abc', 'abcd', 'abcde')