最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql全文搜索對(duì)模糊查詢的性能提升測(cè)試方式

 更新時(shí)間:2023年08月31日 10:16:25   作者:AbsoluteCuteness  
這篇文章主要介紹了Mysql全文搜索對(duì)模糊查詢的性能提升測(cè)試方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

從測(cè)試成績(jī)來看,使用mysql自帶的全文搜索索引類型 FULLTEXT,20w數(shù)據(jù),對(duì)比*like ‘%xxxx%’*雙向模糊查詢,查詢效率提升了54.75倍,還是相當(dāng)不錯(cuò)的;

場(chǎng)景:

最近工作中實(shí)現(xiàn)了一個(gè)通過字段名,提供映射工具給到客戶,使客戶得以通過可視化的字段規(guī)則自行拼裝sql,實(shí)現(xiàn)數(shù)據(jù)篩選分析功能;我們這張表的字段數(shù)非常多,足有上百個(gè);

分兩個(gè)表的業(yè)務(wù),一張表日表20w左右,另一張表日表200萬左右;

因?yàn)閟ql規(guī)則是用戶自定義的,一直沒有做什么優(yōu)化;

但是最近因?yàn)橛脩羝囱b出了超長(zhǎng)sql,包含大量like查詢以及and、or,最終導(dǎo)致查詢跟不上,不得已考慮對(duì)他的優(yōu)化。

本文講述主要問題,大量的雙模糊 like ‘%xxx%’優(yōu)化

mysql中的全文索引介紹

MySQL 5.6開始支持全文索引,可以在變長(zhǎng)的字符串類型上創(chuàng)建全文索引,來加速模糊匹配業(yè)務(wù)場(chǎng)景的DML操作。

它是一個(gè)inverted index(反向索引),創(chuàng)建fulltext index時(shí)會(huì)自動(dòng)創(chuàng)建6個(gè)auxiliary index tables(輔助索引表),同時(shí)支持索引并行創(chuàng)建,并行度可以通過參數(shù)innodb_ft_sort_pll_degree設(shè)置,對(duì)于大表可以適當(dāng)增加該參數(shù)值。

在MySQL5.6之前的版本中,只有 MyISAM 存儲(chǔ)引擎支持全文索引,而且對(duì)中文搜索支持不是太好,需要自己進(jìn)行分詞后將段落預(yù)處理拆分成單詞在入庫(kù)。

MySQL5.7 開始才增加了對(duì)Inodb存儲(chǔ)引擎的支持,并且有了內(nèi)置的分詞器 ngram。ngram 支持設(shè)置設(shè)置分詞的長(zhǎng)度,可以將中文按長(zhǎng)度拆分為不同的單詞(雖然不太智能,但滿足大部分場(chǎng)景)。

-- 查詢mysql版本
select version();
-- 8.0.23

測(cè)試部分

1、創(chuàng)建無測(cè)試字段索引的測(cè)試表,并導(dǎo)入20w數(shù)據(jù),進(jìn)行無索引狀態(tài)下模糊查詢耗時(shí)計(jì)算

-- 無索引狀態(tài)下耗時(shí)
select * from yd_alarminfo_all_20220825 where alarmTitle like "%端口故障%"
-- 耗時(shí):0.438秒

2、使用ngram分詞,創(chuàng)建全文索引

alter table yd_alarminfo_all_20220825 add fulltext index idx_full_title(alarmTitle) with parser ngram;

3、再次查詢

-- 無索引狀態(tài)下耗時(shí)
select * from yd_alarminfo_all_20220825 WHERE MATCH (alarmTitle) against('端口故障' IN BOOLEAN MODE)
--耗時(shí):0.008秒

使用過程中的其他問題 

1)關(guān)于參數(shù)微調(diào)

我在使用的時(shí)候并沒有對(duì)配置參數(shù)做調(diào)整,根據(jù)官方文檔的介紹。

全文搜索并沒有提供很多的可供調(diào)整的參數(shù),而且默認(rèn)行為不管是對(duì)中文的分詞都是滿足的,大多數(shù)場(chǎng)景屬于開箱即用,無需調(diào)整。

更多參考官方文檔: 12.10.6 Fine-Tuning MySQL Full-Text Search

2)Natural Language 模式下

查詢結(jié)果不太一樣,匹配字符串“端口故障”被進(jìn)行了再次分詞;該模式為默認(rèn)的查詢模式,需要注意一下

MySQL全文檢索模式主要有兩種:

一、自然語言模式(NATURAL LANGUAGE MODE) 自然語言模式是MySQL 默認(rèn)的全文檢索模式。自然語言模式不能使用操作符,不能指定關(guān)鍵詞必須出現(xiàn)或者必須不能出現(xiàn)等復(fù)雜查詢。

二、BOOLEAN模式(BOOLEAN MODE) BOOLEAN模式可以使用操作符,可以支持指定關(guān)鍵詞必須出現(xiàn)或者必須不能出現(xiàn)或者關(guān)鍵詞的權(quán)重高還是低等復(fù)雜查詢。

3)在MATCH … AGAINST(…) 中

有自己的 AND OR 語法,如果使用傳統(tǒng)的AND、OR拼裝,效率拉胯

-- 錯(cuò)誤示例
select * from yd_alarminfo_all_20220825 WHERE MATCH (alarmTitle) against('網(wǎng)卡端口故障' IN BOOLEAN MODE) OR MATCH (alarmTitle) against('AAA' IN BOOLEAN MODE)
-- 正確示例
select * from yd_alarminfo_all_20220825 WHERE MATCH (alarmTitle) against('網(wǎng)卡端口故障 -AAA-' IN BOOLEAN MODE)

4)補(bǔ)充BOOLEAN MODE下的語法

示例:

MATCH (col1,col2,...) AGAINST (expr IN BOOLEAN MODE)
expr 語法示例:
	'apple banana'
	查找至少包含兩個(gè)單詞之一的行。
	'+apple +juice'
	查找包含這兩個(gè)單詞的行。
	'+apple macintosh'
	查找包含“apple”一詞的行,但如果它們也包含“macintosh”,則排名更高。
	'+apple -macintosh'
	查找包含“apple”一詞但不包含“macintosh”一詞的行。
	'+apple ~macintosh'
	查找包含“apple”一詞的行,但如果該行也包含“macintosh”一詞,則將其評(píng)分低于行不包含。這比搜索'+apple -macintosh'“軟”,因?yàn)椤癿acintosh”的存在導(dǎo)致該行根本不返回。
	'+apple +(>turnover <strudel)'
	查找包含“apple”和“turnover”或“apple”和“strudel”(按任何順序)的行,但排名“apple turnover”高于“apple strudel”。
	'apple*'
	查找包含“apple”、“apples”、“applesauce”或“applet”等單詞的行。
	'"some words"'
	查找包含確切短語“一些單詞”的行(例如,包含“一些智慧單詞”但不包含“一些噪音單詞”的行)。請(qǐng)注意,包含短語的"字符是劃定短語的運(yùn)算符字符。它們不是包圍搜索字符串本身的引號(hào)。

結(jié)論部分

從測(cè)試成績(jī)來看,使用mysql自帶的全文搜索索引類型 FULLTEXT,20w數(shù)據(jù),對(duì)比*like ‘%xxxx%’*雙向模糊查詢,查詢效率提升了54.75倍,還是相當(dāng)不錯(cuò)的;

關(guān)于mysql全文搜索更多的基礎(chǔ)知識(shí)我就不再介紹了,主要是進(jìn)行測(cè)試其有效性,還是令人滿意的。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

參考:

官方文檔

Functions and Operators 》 Full-Text Search Functions

相關(guān)文章

  • Mysql單庫(kù)遷移的操作方法

    Mysql單庫(kù)遷移的操作方法

    這篇文章主要介紹了Mysql單庫(kù)遷移的相關(guān)知識(shí),包括導(dǎo)出數(shù)據(jù)庫(kù)文件,上傳至目標(biāo)機(jī)器的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • MySQL性能優(yōu)化配置參數(shù)之thread_cache和table_cache詳解

    MySQL性能優(yōu)化配置參數(shù)之thread_cache和table_cache詳解

    這篇文章主要介紹了MySQL性能優(yōu)化配置參數(shù)之thread_cache和table_cache詳解,THREAD_CACHE是Mysql的連接池,table_cache指定表高速緩存的大小,需要的朋友可以參考下
    2014-07-07
  • MySQL 全文索引使用指南

    MySQL 全文索引使用指南

    在 MySQL 中,我們經(jīng)常使用 WHERE 條件用于進(jìn)行值的相等比較、范圍過濾。然而,我們也會(huì)使用關(guān)鍵字進(jìn)行搜索,這個(gè)基于搜索值與其他值的相關(guān)性來進(jìn)行過濾。MySQL全文檢索即用于這種場(chǎng)景。本篇將介紹如何使用全文檢索。
    2021-05-05
  • Mysql中的DCL權(quán)限詳解

    Mysql中的DCL權(quán)限詳解

    這篇文章主要介紹了Mysql中的DCL詳解,DCL是數(shù)據(jù)控制語言,用來管理用戶、控制數(shù)據(jù)庫(kù)的訪問權(quán)限,就控制有哪些用戶可以訪問數(shù)據(jù)庫(kù),可以訪問數(shù)據(jù)庫(kù)的哪些內(nèi)容,需要的朋友可以參考下
    2023-08-08
  • MySQL 有關(guān)MHA搭建與切換的幾個(gè)錯(cuò)誤log匯總

    MySQL 有關(guān)MHA搭建與切換的幾個(gè)錯(cuò)誤log匯總

    這篇文章主要介紹了MySQL 有關(guān)MHA搭建與切換的幾個(gè)錯(cuò)誤log匯總,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2020-12-12
  • centos7環(huán)境下二進(jìn)制安裝包安裝 mysql5.6的方法詳解

    centos7環(huán)境下二進(jìn)制安裝包安裝 mysql5.6的方法詳解

    這篇文章主要介紹了centos7環(huán)境下二進(jìn)制安裝包安裝 mysql5.6的方法,詳細(xì)分析了centos7環(huán)境下使用二進(jìn)制安裝包安裝 mysql5.6的具體步驟、相關(guān)命令、配置方法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-02-02
  • MySQL 多列 IN 查詢之語法、性能與實(shí)戰(zhàn)技巧(最新整理)

    MySQL 多列 IN 查詢之語法、性能與實(shí)戰(zhàn)技巧(最新整理)

    本文詳解MySQL多列IN查詢,對(duì)比傳統(tǒng)OR寫法,強(qiáng)調(diào)其簡(jiǎn)潔高效,適合批量匹配復(fù)合鍵,通過聯(lián)合索引、分批次優(yōu)化提升性能,兼容多種數(shù)據(jù)庫(kù),提供動(dòng)態(tài)生成和實(shí)戰(zhàn)技巧,助力復(fù)雜條件查詢優(yōu)化,感興趣的朋友一起看看吧
    2025-07-07
  • mysql如何根據(jù)漢字首字母排序

    mysql如何根據(jù)漢字首字母排序

    這篇文章主要介紹了mysql根據(jù)漢字首字母排序sql語句,需要的朋友可以參考下
    2014-03-03
  • MySQL使用組合查詢的示例代碼

    MySQL使用組合查詢的示例代碼

    本文主要介紹了MySQL使用組合查詢的示例代碼,如何使用UNION操作符來組合SELECT語句,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • MySQL性能瓶頸排查定位實(shí)例詳解

    MySQL性能瓶頸排查定位實(shí)例詳解

    這篇文章主要介紹了MySQL性能瓶頸排查定位的方法,結(jié)合實(shí)例形式詳細(xì)分析了MySQL排查性能瓶頸問題的步驟與相關(guān)技巧,需要的朋友可以參考下
    2016-04-04

最新評(píng)論

德钦县| 红安县| 朝阳县| 大城县| 阜城县| 庆阳市| 宜君县| 青岛市| 麦盖提县| 安泽县| 台南县| 巴青县| 黑龙江省| 锦屏县| 宿州市| 郁南县| 类乌齐县| 湛江市| 民县| 潼关县| 都兰县| 五家渠市| 湖州市| 桐乡市| 达尔| 荔波县| 黎川县| 和林格尔县| 尤溪县| 木兰县| 馆陶县| 临城县| 乐至县| 邮箱| 贵阳市| 金山区| 甘孜| 渝北区| 云和县| 康马县| 延长县|