站長資訊網
        最全最豐富的資訊網站

        MySQL性能調優之查詢優化

        本篇文章給大家帶來了關于mysql的相關知識,其中主要介紹了關于性能優化的相關問題,包括了查詢優化等內容,下面一起來看一下,希望對大家有幫助。

        MySQL性能調優之查詢優化

        推薦學習:mysql視頻教程

        在編寫快速的查詢之前,需要清楚一點,真正重要的是響應時間,而且要知道在整個SQL語句的執行過程中每個步驟都花費了多長時間,要知道哪些步驟是拖垮執行效率的關鍵步驟,想要做到這點,必須要知道查詢的生命周期,然后進行優化,不同的應用場景有不同的優化方式,不要一概而論,具體情況具體分析。

        一、查詢慢的原因

        1、網絡

        2、CPU

        3、IO

        4、上下文切換

        5、系統調用

        6、生成統計信息

        7、鎖等待時間

        二、優化數據訪問

        1、查詢性能低下的主要原因是訪問的數據太多,某些查詢不可避免的需要篩選大量的數據,我們可以通過減少訪問數據量的方式進行優化

        (1)確認應用程序是否在檢索大量超過需要的數據

        (2)確認mysql服務器層是否在分析大量超過需要的數據行

        2、是否向數據庫請求了不需要的數據

        (1)查詢不需要的記錄(我們常常會誤以為mysql會只返回需要的數據,實際上mysql卻是先返回全部結果再進行計算,在日常的開發習慣中,經常是先用select語句查詢大量的結果,然后獲取前面的N行后關閉結果集。優化方式是在查詢后面添加limit)

        (2)多表關聯時返回全部列(select * from actor inner join film_actor using(actor_id) inner join film using(film_id) where film.title='Academy Dinosaur';select actor.* from actor…;)

        (3)總是取出全部列(在公司的企業需求中,禁止使用select *,雖然這種方式能夠簡化開發,但是會影響查詢的性能,所以盡量不要使用)

        (4)重復查詢相同的數據(如果需要不斷的重復執行相同的查詢,且每次返回完全相同的數據,因此,基于這樣的應用場景,我們可以將這部分數據緩存起來,這樣的話能夠提高查詢效率。)

        三、執行過程的優化

        1、查詢緩存

        在解析一個查詢語句之前,如果查詢緩存是打開的,那么mysql會優先檢查這個查詢是否命中查詢緩存中的數據,如果查詢恰好命中了查詢緩存,那么會在返回結果之前會檢查用戶權限,如果權限沒有問題,那么mysql會跳過所有的階段,就直接從緩存中拿到結果并返回給客戶端

        2、查詢優化處理

        mysql查詢完緩存之后會經過以下幾個步驟:解析SQL、預處理、優化SQL執行計劃,這幾個步驟出現任何的錯誤,都可能會終止查詢。

        (1)語法解析器和預處理

        mysql通過關鍵字將SQL語句進行解析,并生成一顆解析樹,mysql解析器將使用mysql語法規則驗證和解析查詢,例如驗證使用使用了錯誤的關鍵字或者順序是否正確等等,預處理器會進一步檢查解析樹是否合法,例如表名和列名是否存在,是否有歧義,還會驗證權限等等
        (2)查詢優化器

        當語法樹沒有問題之后,相應的要由優化器將其轉成執行計劃,一條查詢語句可以使用非常多的執行方式,最后都可以得到對應的結果,但是不同的執行方式帶來的效率是不同的,優化器的最主要目的就是要選擇最有效的執行計劃。

        mysql使用的是基于成本的優化器,在優化的時候會嘗試預測一個查詢使用某種查詢計劃時候的成本,并選擇其中成本最小的一個。

        a、select count(*) from film_actor; show status like 'last_query_cost';

        可以看到這條查詢語句大概需要做1104個數據頁才能找到對應的數據,這是經過一系列的統計信息計算來的.

        (a) 每個表或者索引的頁面個數

        (b) 索引的基數

        (c) 索引和數據行的長度

        (d) 索引的分布情況

        b、在很多情況下mysql會選擇錯誤的執行計劃,原因如下:

        (a)統計信息不準確(InnoDB因為其mvcc的架構,并不能維護一個數據表的行數的精確統計信息)

        (b) 執行計劃的成本估算不等同于實際執行的成本(有時候某個執行計劃雖然需要讀取

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 精品露脸国产偷人在视频| 久久精品无码一区二区app| 国内精品伊人久久久久网站| 国产精品亲子乱子伦xxxx裸| 欧美成人精品第一区二区三区| 国产精品视频久久| 亚洲精品制服丝袜四区| 精品精品国产欧美在线小说区| 凹凸69堂国产成人精品视频| 无码人妻精品一区二区三区久久久| 国产精品免费久久久久久久久| 成人精品视频在线观看| 亚洲国产精品一区二区第一页| 久久精品亚洲福利| 99热热久久这里只有精品68| 国产精品一久久香蕉产线看| 精品卡一卡二卡乱码高清| 亚洲国产精品一区第二页| 热综合一本伊人久久精品| 精品福利一区二区三区精品国产第一国产综合精品 | 亚洲电影日韩精品| 国产亚洲曝欧美不卡精品| 99热精品毛片全部国产无缓冲| 亚洲无删减国产精品一区| 99久久免费国产精精品| 99在线精品免费视频九九视| 精品视频一区二区三三区四区| 精品无码AV无码免费专区| 国产乱码精品一品二品| 国产精品亚洲片在线观看不卡| 精品国产VA久久久久久久冰| 国产精品自在线拍国产| 国产精品免费大片| 潮喷大喷水系列无码久久精品| 91精品国产91久久综合| 国产在线精品一区二区不卡 | 嫖妓丰满肥熟妇在线精品| 亚洲欧美精品SUV| 国产午夜福利精品一区二区三区 | 99久久99这里只有免费的精品| 国产精品国产三级国产av品爱网|