mysql子查詢?cè)趺磧?yōu)化 mysql子查詢效率

mysql 優(yōu)化包括哪些內(nèi)容?

mysql的優(yōu)化大的有兩方面:

漠河ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

1、配置優(yōu)化

配置的優(yōu)化其實(shí)包含兩個(gè)方面的:操作系統(tǒng)內(nèi)核的優(yōu)化和mysql配置文件的優(yōu)化

1)系統(tǒng)內(nèi)核的優(yōu)化對(duì)專用的mysql服務(wù)器來(lái)說(shuō),無(wú)非是內(nèi)存實(shí)用、連接數(shù)、超時(shí)處理、TCP處理等方面的優(yōu)化,根據(jù)自己的硬件配置來(lái)進(jìn)行優(yōu)化,這里不多講;

2)mysql配置的優(yōu)化,一般來(lái)說(shuō)包含:IO處理的常用參數(shù)、最大連接數(shù)設(shè)置、緩存使用參數(shù)的設(shè)置、慢日志的參數(shù)的設(shè)置、innodb相關(guān)參數(shù)的設(shè)置等,如果有主從關(guān)系在設(shè)置主從同步的相關(guān)參數(shù)即可,網(wǎng)上的相關(guān)配置文件很多,大同小異,常用的設(shè)置大多修改這些差不多就夠用了。

2、sql語(yǔ)句的優(yōu)化

1) ?盡量稍作計(jì)算

Mysql的作用是用來(lái)存取數(shù)據(jù)的,不是做計(jì)算的,做計(jì)算的話可以用其他方法去實(shí)現(xiàn),mysql做計(jì)算是很耗資源的。

2)盡量少 join

MySQL 的優(yōu)勢(shì)在于簡(jiǎn)單,但這在某些方面其實(shí)也是其劣勢(shì)。MySQL 優(yōu)化器效率高,但是由于其統(tǒng)計(jì)信息的量有限,優(yōu)化器工作過(guò)程出現(xiàn)偏差的可能性也就更多。對(duì)于復(fù)雜的多表 Join,一方面由于其優(yōu)化器受限,再者在 Join 這方面所下的功夫還不夠,所以性能表現(xiàn)離 Oracle 等關(guān)系型數(shù)據(jù)庫(kù)前輩還是有一定距離。但如果是簡(jiǎn)單的單表查詢,這一差距就會(huì)極小甚至在有些場(chǎng)景下要優(yōu)于這些數(shù)據(jù)庫(kù)前輩

3)盡量少排序

排序操作會(huì)消耗較多的 CPU 資源,所以減少排序可以在緩存命中率高等 IO 能力足夠的場(chǎng)景下會(huì)較大影響 SQL的響應(yīng)時(shí)間。

對(duì)于MySQL來(lái)說(shuō),減少排序有多種辦法,比如:

通過(guò)利用索引來(lái)排序的方式進(jìn)行優(yōu)化

減少參與排序的記錄條數(shù)

非必要不對(duì)數(shù)據(jù)進(jìn)行排序

4)盡量避免 select *

在數(shù)據(jù)量少并且訪問(wèn)量不大的情況下,select * 沒(méi)有什么影響,但是量級(jí)達(dá)到一定級(jí)別的時(shí)候,在執(zhí)行效率和IO資源的使用上,還是有很大關(guān)系的,用什么字段取什么字段,減少不必要的資源浪費(fèi)。

5)盡量用 join 代替子查詢

雖然 Join 性能并不佳,但是和 MySQL 的子查詢比起來(lái)還是有非常大的性能優(yōu)勢(shì)。MySQL 的子查詢執(zhí)行計(jì)劃一直存在較大的問(wèn)題,雖然這個(gè)問(wèn)題已經(jīng)存在多年,但是到目前已經(jīng)發(fā)布的所有穩(wěn)定版本中都普遍存在,一直沒(méi)有太大改善。雖然官方也在很早就承認(rèn)這一問(wèn)題,并且承諾盡快解決,但是至少到目前為止我們還沒(méi)有看到哪一個(gè)版本較好的解決了這一問(wèn)題。

【Mysql】查詢優(yōu)化——減少回表操作

??聚集索引:數(shù)據(jù)行的物理順序與列值(一般是主鍵的那一列)的邏輯順序相同,一個(gè)表中只能擁有一個(gè)聚集索引。 葉子結(jié)點(diǎn)存儲(chǔ)索引和行記錄,聚簇索引查詢會(huì)很快,因?yàn)榭梢灾苯佣ㄎ坏叫杏涗洝?/p>

??非聚集索引:該索引中索引的邏輯順序與磁盤上行的物理存儲(chǔ)順序不同,一個(gè)表中可以擁有多個(gè)非聚集索引。 葉子節(jié)點(diǎn)存儲(chǔ)聚簇索引值(主鍵id),需要掃碼兩遍索引樹,先通過(guò)普通索引定位到主鍵值id,再通過(guò)聚集索引定位到行記錄。

??回表查詢可以理解為普通索引的查詢,先定位主鍵值,再定位行記錄,它的性能較掃一遍索引樹更低。

??索引覆蓋,即將查詢sql中的字段添加到聯(lián)合索引里面,只要保證查詢語(yǔ)句里面的字段都在索引文件中,就無(wú)需進(jìn)行回表查詢;

??實(shí)際開發(fā)中,不可能把所有字段建立到聯(lián)合索引,可根據(jù)實(shí)際業(yè)務(wù)場(chǎng)景,把經(jīng)常需要查詢的字段建立到聯(lián)合索引中。

?? 在Mysql5.6的版本上推出,用于優(yōu)化查詢。 在索引遍歷過(guò)程中,對(duì)索引中包含的字段先做判斷,直接過(guò)濾掉不滿足條件的記錄,減少回表次數(shù)。

?? 優(yōu)化超多分頁(yè)場(chǎng)景。 查詢條件放到子查詢中,子查詢只查主鍵id,然后使用子查詢中確定的主鍵關(guān)聯(lián)查詢其他的屬性字段。

mysql的子查詢中有統(tǒng)計(jì)語(yǔ)句 我該如何優(yōu)化

子查詢優(yōu)化策略

對(duì)于不同類型的子查詢,優(yōu)化器會(huì)選擇不同的策略。

1. 對(duì)于 IN、=ANY 子查詢,優(yōu)化器有如下策略選擇:

semijoin

Materialization

exists

2. 對(duì)于 NOT IN、ALL 子查詢,優(yōu)化器有如下策略選擇:

Materialization

exists

3. 對(duì)于 derived 派生表,優(yōu)化器有如下策略選擇:

derived_merge,將派生表合并到外部查詢中(5.7 引入 );

將派生表物化為內(nèi)部臨時(shí)表,再用于外部查詢。

注意:update 和 delete 語(yǔ)句中子查詢不能使用 semijoin、materialization 優(yōu)化策略

新聞名稱:mysql子查詢?cè)趺磧?yōu)化 mysql子查詢效率
標(biāo)題網(wǎng)址:http://bm7419.com/article24/dohjjce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、企業(yè)建站、商城網(wǎng)站、微信小程序、Google、外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)