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

優(yōu)化MySQL數(shù)據(jù)庫中的查詢語句詳解

 更新時(shí)間:2014年07月25日 09:11:46   投稿:shichen2014  
這篇文章主要介紹了優(yōu)化MySQL數(shù)據(jù)庫中的查詢語句,非常實(shí)用的經(jīng)驗(yàn)總結(jié),需要的朋友可以參考下

很多時(shí)候基于php+MySQL建立的網(wǎng)站所出現(xiàn)的系統(tǒng)性能瓶頸往往是出在MySQL上,而MySQL中用的最多的語句就是查詢語句,因此,針對(duì)MySQL數(shù)據(jù)庫查詢語句的優(yōu)化就顯得至關(guān)重要!本文就此問題做出詳細(xì)分析如下:

1、判斷是否向MySQL數(shù)據(jù)庫請求了不需要的數(shù)據(jù),如下列情況:

(1)、查詢不需要的數(shù)據(jù),例如你需要10條數(shù)據(jù),但是你選出了100條數(shù)據(jù)加了limit做限制。
(2)、多表關(guān)聯(lián)時(shí)返回全部列
(3)、總是取出全部列select*......取出全部列,會(huì)讓優(yōu)化器無法完成索引覆蓋掃描這類優(yōu)化,還為服務(wù)器帶來額外的I/O、內(nèi)存、和cpu的消耗
(4)、重復(fù)查詢相同的數(shù)據(jù)例如,在用戶評(píng)論的地方需要查詢用戶的頭像的URL,那么用戶多次評(píng)論的時(shí)候?qū)⑦@個(gè)數(shù)據(jù)緩存起來,需要的時(shí)候從緩存取出,這樣性能會(huì)更好。

2、mysql是否在掃描額外的記錄

最簡單衡量查詢開銷的三個(gè)指標(biāo)如下:響應(yīng)時(shí)間、掃描的行數(shù)返回的行數(shù)

響應(yīng)時(shí)間:服務(wù)時(shí)間和排隊(duì)時(shí)間。服務(wù)時(shí)間是指數(shù)據(jù)庫處理這個(gè)查詢真正花費(fèi)的時(shí)間。排隊(duì)時(shí)間是指服務(wù)器因?yàn)榈却承┵Y源而沒有真正執(zhí)行的查詢。

掃描的行數(shù)返回的行數(shù):理想情況下掃描的行數(shù)和返回的行數(shù)應(yīng)該是相同的。

一般MYSQL能夠使用如下三種方式應(yīng)用where條件記錄,從好到壞依次為:

(1)、在索引中使用where條件來過濾不匹配的記錄,在存儲(chǔ)索引層完成。

(2)、使用索引覆蓋掃描來返回記錄,直接從索引中過濾不需要的記錄并返回命中的結(jié)果,在mysql服務(wù)器層完成,但無需在回表查詢記錄。

(3)、從數(shù)據(jù)表中返回?cái)?shù)據(jù),然后過濾不滿足條件的記錄,在mysql服務(wù)器層完成,需要先從數(shù)據(jù)表讀出記錄然后過濾

如果發(fā)現(xiàn)查詢需要掃描大量的數(shù)據(jù)但返回少數(shù)的行,那么通??梢試L試下面的技巧:

(1)、使用索引覆蓋掃描,把所有需要的列都放到索引中,這樣存儲(chǔ)引擎無須返回表獲取對(duì)應(yīng)行就可以返回結(jié)果了

(2)、改變庫表結(jié)構(gòu),使用單獨(dú)的匯總表

(3)、重寫這個(gè)復(fù)雜的查詢

3、重構(gòu)查詢的方式

(1)、一個(gè)復(fù)雜查詢還是多個(gè)簡單查詢

Mysql內(nèi)部每秒能夠掃描內(nèi)存中上百萬條數(shù)據(jù),相比之下,mysql響應(yīng)數(shù)據(jù)給客戶端就慢得多,在其他條件都相同的時(shí)候,使用盡可能少的查詢當(dāng)然是好的,但有時(shí)候?qū)⒁粋€(gè)大查詢分解為多個(gè)小查詢都是很有必要的。

(2)、切分查詢

刪除舊數(shù)據(jù)是一個(gè)很好的例子,在定期清除大量數(shù)據(jù)時(shí),如果用一個(gè)大的語句一次性完成的話,則可能一次鎖住很多數(shù)據(jù),占滿整個(gè)事物日志。耗盡系統(tǒng)資源,阻塞很多小的但很重要的查詢。

Mysql>deletefrommessageswherecreated<DATE_SUB(NOW(),INTERVAL3MONTH);

改寫:

Rows_affected=0;
Do{
Rows_affected=do_query(
“deletefrommessageswherecreated<DATE_SUB(NOW(),INTERVAL3MONTH)”;
)
}

(3)、分解關(guān)聯(lián)查詢:

可以讓緩存的效率更高,在應(yīng)用程序中可以方便的緩存單條數(shù)據(jù)
就查詢分解后,執(zhí)行單個(gè)查詢可以減少鎖的競爭
在應(yīng)用層做關(guān)聯(lián),可以更容易對(duì)數(shù)據(jù)庫進(jìn)行拆分,更容易做到高性能和高擴(kuò)展
查詢本身效率也會(huì)更高。
可以減少冗余數(shù)據(jù)的查詢,在應(yīng)用層做關(guān)聯(lián)查詢,意味著對(duì)于某條數(shù)據(jù)應(yīng)用只需要查詢一次,而在數(shù)據(jù)庫中做查詢,可能需要重復(fù)的訪問一部分?jǐn)?shù)據(jù)。

適合場景:

①當(dāng)應(yīng)用程序能夠方便的緩存單個(gè)查詢結(jié)果的時(shí)候;
②當(dāng)可以將數(shù)據(jù)分布到不同的mysql服務(wù)器上的時(shí)候;
③當(dāng)能夠使用IN()的方式代替關(guān)聯(lián)查詢的時(shí)候;
④當(dāng)查詢中使用一個(gè)數(shù)據(jù)表的時(shí)候。

相關(guān)文章

  • SQL Server COALESCE函數(shù)詳解及實(shí)例

    SQL Server COALESCE函數(shù)詳解及實(shí)例

    這篇文章主要介紹了SQL Server COALESCE函數(shù)詳解及實(shí)例的相關(guān)資料,COALESCE函數(shù)比ISNULL更加強(qiáng)大,這個(gè)函數(shù)的確非常有用,需要的朋友可以參考下
    2016-12-12
  • MySQL中無過濾條件的count詳解

    MySQL中無過濾條件的count詳解

    這篇文章主要給大家介紹了關(guān)于MySQL中無過濾條件count的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧
    2019-02-02
  • mysql中varchar和text的區(qū)別和比較

    mysql中varchar和text的區(qū)別和比較

    在存儲(chǔ)字符串時(shí)可以使用char、varchar或者text類型,下面這篇文章主要給大家介紹了關(guān)于mysql中varchar和text的區(qū)別和比較的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • 查看本地MYSQL數(shù)據(jù)庫IP地址的三種方法

    查看本地MYSQL數(shù)據(jù)庫IP地址的三種方法

    本文介紹了多種方法來查看連接到本地MySQL服務(wù)器的IP地址,括使用SQL查詢從`information_schema.processlist`獲取IP地址,并通過`group by`進(jìn)行統(tǒng)計(jì),以及通過命令行工具如`mysql`和`awk`進(jìn)行過濾和計(jì)數(shù),這些方法有助于監(jiān)控和管理數(shù)據(jù)庫連接,需要的朋友可以參考下
    2024-10-10
  • MySQL查詢表中某列字段相同的重復(fù)數(shù)據(jù)的方法

    MySQL查詢表中某列字段相同的重復(fù)數(shù)據(jù)的方法

    在數(shù)據(jù)庫查詢中,我們經(jīng)常需要查找表中某列中重復(fù)的數(shù)據(jù),本文將介紹如何使用 SQL 查詢語句來查找表中某列字段相同的重復(fù)數(shù)據(jù),幫助你快速定位重復(fù)數(shù)據(jù)問題并進(jìn)行處理
    2023-08-08
  • MySQL多表聯(lián)合查詢、連接查詢、子查詢的實(shí)現(xiàn)

    MySQL多表聯(lián)合查詢、連接查詢、子查詢的實(shí)現(xiàn)

    本文主要介紹了MySQL多表聯(lián)合查詢、連接查詢、子查詢的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • MySQL日期數(shù)據(jù)類型、時(shí)間類型使用總結(jié)

    MySQL日期數(shù)據(jù)類型、時(shí)間類型使用總結(jié)

    MySQL日期數(shù)據(jù)類型、MySQL時(shí)間類型使用總結(jié),需要的朋友可以參考下。
    2010-06-06
  • 詳解SQL注入--安全(二)

    詳解SQL注入--安全(二)

    這篇文章主要介紹了SQL注入安全,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • MySQL 如何修改root用戶的密碼

    MySQL 如何修改root用戶的密碼

    這篇文章主要介紹了MySQL 如何修改root用戶的密碼,幫助大家更好的使用MySQL,不用擔(dān)心忘記密碼,感興趣的朋友可以了解下
    2020-09-09
  • mysql 截取指定的兩個(gè)字符串之間的內(nèi)容

    mysql 截取指定的兩個(gè)字符串之間的內(nèi)容

    今天我同事在用mysql的時(shí)候,需要對(duì)一個(gè)字符串中的指定內(nèi)容進(jìn)行截取
    2009-07-07

最新評(píng)論

武山县| 岑溪市| 溧水县| 承德县| 清远市| 曲麻莱县| 康平县| 城市| 台湾省| 米林县| 板桥市| 铅山县| 鲁山县| 中宁县| 巴林右旗| 乌鲁木齐县| 泰州市| 扎赉特旗| 宝丰县| 沧州市| 蒲江县| 嘉禾县| 芜湖县| 论坛| 连江县| 长葛市| 泸州市| 南昌县| 海伦市| 徐水县| 东方市| 秭归县| 丰镇市| 山东| 宝应县| 乌恰县| 齐齐哈尔市| 开封县| 林甸县| 墨玉县| 阜平县|