的MySQL/InnoDB的索引如果在MySQL的InnoDB表的索引字段(姑且稱之爲長期在這裏),只能使用:如何迫使長期LIKE%...%
term LIKE 'step%'
查詢種類%符號末尾如果您想索引工作。換句話說:
你可以做的前綴只
沒有此限制的解決辦法,將在certian情況下工作索引搜索。
的MySQL/InnoDB的索引如果在MySQL的InnoDB表的索引字段(姑且稱之爲長期在這裏),只能使用:如何迫使長期LIKE%...%
term LIKE 'step%'
查詢種類%符號末尾如果您想索引工作。換句話說:
你可以做的前綴只
沒有此限制的解決辦法,將在certian情況下工作索引搜索。
重要!這是一種解決方法,它不適合所有情況。但在某些情況下,它可能派上用場。
此替代方法有助於節省性能,但是通過使用額外的內存量來支付。
例的情況下
讓我們建立一個簡單的例子情況:
term
------------------
...
Understanding InnoDB clustered indexes
...
和用戶搜索的所有條款符合以下斷言:
term LIKE '%InnoDB%'
如果您簡化爲短語LIKE'InnoDB%',這個短語將會從搜索中丟失。
解決方法
介紹R項列將包含扭轉長期:
term rterm
------------------
...
Understanding InnoDB clustered indexes sexedni deretsulc BDonnI gnidnatsrednU
...
添加一個索引列R項:
ALTER TABLE `t_term`
ADD INDEX `rterm` (`rterm`);
或唯一一個根據您的情況:
ALTER TABLE `t_term`
ADD UNIQUE `rterm` (`rterm`);
由以下謂詞應用搜索:
term LIKE 'InnoDB%' OR rterm LIKE 'BDonnI%'
其中 'BDonnI' 是 'InnoDB的' 反轉字符串。
利潤!
查詢計劃
MySQL查詢,以填補R項 columnn
MySQL有一個方便的字符串函數REVERSE()。爲了填補R項列使用:
UPDATE t_term SET rterm = REVERSE(term)
嗯,這並不是真的強制使用索引來表示問題中提到的'LIKE%...%',是嗎? ;-P –
哇,它像一個魅力。謝謝 – Learner
@ÁlvaroGonzález絕對不是。問題標題旨在通過搜索找到此解決方法。實際上,它通過搜索兩個索引併合並結果來模仿完整索引。 –
如果必須掃描整個索引,因爲你不能依靠它的量級上,這將是性能優勢? (無論如何,我不認爲這是一個壞問題。) –
@ÁlvaroGonzález這是一個經常遇到的問題,我想分享一個我爲SO用戶使用的技巧。 –