0
基本上我想要做的是顛倒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指數:
SELECT txt FROM texts WHERE txt LIKE 'abc%';
現在我想有些不同的行爲。我希望在查詢'abcde'
時返回'abcd'
行。目前,我已經卡住了與此查詢:
SELECT txt FROM texts WHERE 'abcde' LIKE CONCAT(txt, '%');
很明顯(通過解釋確認)它不會使用任何索引,但我的直覺告訴我,它應該能夠對指數高達索引比較特殊的價值值的長度(就像strncmp一樣)。
這個主要原因是我的表中有大量的域條目。在查詢「www.something.example.org」時,我想選擇「example.org」和「something.example.org」(但不是「else.example.org」)。不幸的是,拆分和執行多個查詢或應用OR
子句似乎對我而言太慢。
我也不會想到,這還可以執行若干好多「或」條款 - 謝謝! – pamelus