mysql如何優化like 關鍵字 查詢?

時間 2021-06-01 19:51:08

1樓:kan tmac

貼個鏈結總結的不錯關於字串索引

《MySQL實戰45講》

2樓:李國寶

簡單來說就是 like 'keyword%' 或者like '%keyword',不支援'%keyword%'.

3樓:one flower

為何不考慮其他方式實現呢,

可以使用SQL模式匹配啊,

MySQL提供標準的SQL模式匹配,以及一種基於象Unix實用程式如vi、grep和sed的擴充套件正規表示式模式匹配的格式。

參考自:MySQL模式匹配詳解 One Flower Is A World

也可以使用原生JSON格式來進行儲存,原生的JSON格式查詢不需要遍歷所有字串才能找到資料,支援索引,而且可以做到JSON資料有效性檢查。

參考自: MySQL 5.7原生JSON格式支援

4樓:衛元學

mysql基本都被他們研發團隊重寫了,著重優化了鎖好多機制,處理併發能力提公升了好多!原版mysql的鎖他們都是棄用的,根本適應不了現實的生產環境!好好學習吧!

5樓:聿明leslie

全文索引不能滿足你要求的話,是不是這個需求本身可以被其它方式改造?如果實在不能,你這是乙個字尾的索引要求,MySQL支援字首索引,但是不支援字尾索引,從MySQL5.7後支援表示式索引了,如果你要filter的列是不變的,並且字尾的長度是固定的,就可以為這一列建乙個字尾的substr的表示式索引,應該可以滿足你的要求。

---------

細化一下我的描述,昨天用的手機回答的

你的需求是要匹配字尾,但是字尾一般是沒有優化的,所以應該把字尾裁剪出來,和Andy Young描述有一點比較一致,然後對字尾進行反轉,然後對該生成列建索引,oracle對這種索引叫表示式索引,MySQL5.7成為生成列索引

用例:假如對最長長度為100的字串列的字串後10個字元建索引

create table t1(a int, b varchar(100), c varchar(10) as (reverse(substr(b, length(b)-10))));

create index i1 on t1(c);

查詢:select * from t1 where c like reverse('%關鍵字');

這樣優化器會選擇走生成列的索引。。。

Mysql占用CPU過高如何優化?

kope du mysql cpu高 99 的可能是sql不合理或者沒有合適索引導致 rows read過高 當然也可能是qps非常高,熱點資料讀寫導致鎖爭用等 一般情況都是sql問題,建議優化sql 徐志斌 CPU占用過高和磁碟I O沒有必然聯絡。如果資料庫I O繁忙CPU反而利用率上不去,因為C...

大量讀寫的mysql表怎麼優化?

混血王子 和我的業務類似,但是我沒你這麼大的量。我覺得redis的部分保留,水平分表應該不錯的,另外統計部分用中間表統計。還有就是提供你乙個思路,order用mongodb來存可能好點 已登出 從你的問題描述上看可以使用分庫設計。首先單庫在1千萬時出現效能障礙。我們假設1千萬是單機單庫的效能極限。可...

MySQL 對於千萬級的大表要怎麼優化?

架構師 每當看到這種問題,總有一大堆人在下邊回答不搭邊的東西,從網上copy 幾萬字的內容對於問題有意義嗎?言歸正傳,mysql單錶到達千萬級別確實會有效能瓶頸,不的不說免費的mysql效能和sqlserver,oracel差的太多了。至於優化,可以做一下幾點 1。網上都寫爛的分庫分表,但是也要根據...