将字符串与列长度进行比较(使用索引)

时间:2015-10-06 18:17:22

标签: mysql

基本上我想要做的是扭转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条款似乎对我来说太慢了。

1 个答案:

答案 0 :(得分:1)

我唯一能想到的就是将其转换为等效的IN测试:

WHERE txt IN ('a', 'ab', 'abc', 'abcd', 'abcde')