第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

[MYSQL]MySql 模糊查詢LIKE優(yōu)化(部分適用)

標(biāo)簽:
MySQL

    mysql使用模糊查询时,如果数据量比较大,就会响应很长时间,严重影响效率。

一般的模糊查询:

SELECT `column` FROM `table` WHERE `field` like '%keyword%';

即使对相应的字段建立索引也无济于事(用EXPLAN执行,根本没有触发索引,而是全表搜索)。

在网上查了一下,找到如下几种方法:

一、单个匹配符

SELECT `column` FROM `table` WHERE `field` like 'keyword%';

这样写的好处是可以触发索引,提高查询效率,但只适用部分场景。

二、各种函数

    1、LOCATE()函数

SELECT `column` FROM `table` WHERE LOCATE('keyword', `field`)>0

    2、POSTITON()函数

SELECT `column` FROM `table` WHERE POSITION('keyword' IN `filed`)

    3、INSTR()函数

SELECT `column` FROM `table` WHERE INSTR(`field`, 'keyword' )>0

实际测试,这些函数并不能提高多少效率。?

最后,根据我的具体需求,想到了一种方法(并不适用所有场景,但能解决我遇到的问题

    先交代一下需求:

    根据字段`PRODUCT`(产品)、`TYPE`(类型)和`IDX`(流水号)查询`ID`(识别码)。

原本的SQL:

SELECT * FROM detail WHERE `IDX` LIKE '%TEST001%' AND PRODUCT = 'Pad' AND TYPE= 'AAA'

这样便会遇到上文说到的情况,会全表查询,效率特别慢。

后来发现,在使用like时,在'%'前加一个字符串,便会触发索引,类似于:

SELECT * FROM detail WHERE `IDX` LIKE 'T%EST001%'

这样查询效率会快很多。

因此,我在表中添加了一个字段`SEARCH_ID`,这个字段是由字段`PRODUCT`、`TYPE`的首字符和`IDX`组成的,例如

PRODUCT :Pad

TYPE:AAA

IDX:TEST001 =>  SEARCH_ID : P_A_TEST001。

优化后的代码如下:

SELECT * FROM detail WHERE `IDX` LIKE 'P_A_%TEST001%'

这样写,会使用索引,提高查询效率。

其实不难发现,这样做就相当于把表中的数据,根据字段`PRODUCT`、`TYPE`做了分类,减少了查询数量。

这也算是一种用空间换时间的办法。


最后附上更新表的代码:

UPDATE detail SET `SEARCH_ID` = CONCAT(SUBSTRING(PRODUCT ,1,1),'_',SUBSTRING(TYPE,1,1),'_',IDX)

    写这个是为了方便以后自己翻看,欢迎指正,不喜勿喷。

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 1
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消