成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

阿里P8架構師談:MySQL慢查詢優化、索引優化、以及表等優化總結

數據庫 MySQL
MySQL數據庫常見的兩個瓶頸是:CPU和I/O的瓶頸。我們可以用mpstat, iostat, sar和vmstat來查看系統的性能狀態。除了服務器硬件的性能瓶頸,對于MySQL系統本身,我們可以使用工具來優化數據庫的性能。
 

[[243425]]

 

MySQL優化概述

MySQL數據庫常見的兩個瓶頸是:CPU和I/O的瓶頸。

CPU在飽和的時候一般發生在數據裝入內存或從磁盤上讀取數據時候

磁盤I/O瓶頸發生在裝入數據遠大于內存容量的時候,如果應用分布在網絡上,那么查詢量相當大的時候那么平瓶頸就會出現在網絡上。

我們可以用mpstat, iostat, sar和vmstat來查看系統的性能狀態。除了服務器硬件的性能瓶頸,對于MySQL系統本身,我們可以使用工具來優化數據庫的性能。

MySQL優化方案

Mysql的優化,大體可以分為三部分:索引的優化,sql語句的優化,表的優化

阿里P8架構師談:MySQL慢查詢優化、索引優化、以及表等優化總結

 

索引優化

1.索引

一般的應用系統,讀寫比例在10:1左右,而且插入操作和一般的更新操作很少出現性能問題,在生產環境中,我們遇到最多的也是最容易出現問題的,還是一些復雜的查詢操作,因此對查詢語句的優化是重中之重,加速查詢***的方法就是索引。

索引:簡單的說,相當于圖書的目錄,可以幫助用戶快速的找到需要的內容。

在MySQL中也叫做“鍵”,是存儲引擎用于快速找到記錄的一種數據結構。能夠大大提高查詢效率。特別是當數據量非常大,查詢涉及多個表時,使用索引往往能使查詢速度加快成千上萬倍。

總結:索引的目的在于提高查詢效率,與我們查詢圖書所用的目錄是一個道理:先定位到章,然后定位到該章下的一個小結,然后找到頁數。相似的例子還有:查字典,查地圖等。

2.索引類型

  • 普通索引

是最基本的索引,它沒有任何限制。

  • 唯一索引
與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。
  • 組合索引
指多個字段上創建的索引,只有在查詢條件中使用了創建索引時的***個字段,索引才會被使用。
  • 主鍵索引

是一種特殊的唯一索引,一個表只能有一個主鍵,不允許有空值。一般是在建表的時候同時創建主鍵索引

  • 全文索引

主要用來查找文本中的關鍵字,而不是直接與索引中的值相比較。fulltext索引跟其它索引大不相同,它更像是一個搜索引擎,而不是簡單的where語句的參數匹配。fulltext索引配合match against操作使用,而不是一般的where語句加like。它可以在create table,alter table ,create index使用,不過目前只有char、varchar,text 列上可以創建全文索引。值得一提的是,在數據量較大時候,現將數據放入一個沒有全局索引的表中,然后再用CREATE index創建fulltext索引,要比先為一張表建立fulltext然后再將數據寫入的速度快很多。

3.索引優化

  • 只要列中含有NULL值,就***不要在此例設置索引,復合索引如果有NULL值,此列在使用時也不會使用索引
  • 盡量使用短索引,如果可以,應該制定一個前綴長度
  • 對于經常在where子句使用的列,***設置索引,這樣會加快查找速度
  • 對于有多個列where或者order by子句的,應該建立復合索引
  • 對于like語句,以%或者‘-’開頭的不會使用索引,以%結尾會使用索引
  • 盡量不要在列上進行運算(函數操作和表達式操作)
  • 盡量不要使用not in和<>操作

 

SQL慢查詢的優化

阿里P8架構師談:MySQL慢查詢優化、索引優化、以及表等優化總結

 

1.如何捕獲低效sql

1)slow_query_log

這個參數設置為ON,可以捕獲執行時間超過一定數值的SQL語句。

2)ong_query_time

當SQL語句執行時間超過此數值時,就會被記錄到日志中,建議設置為1或者更短。

3)slow_query_log_file

記錄日志的文件名。

4)log_queries_not_using_indexes

這個參數設置為ON,可以捕獲到所有未使用索引的SQL語句,盡管這個SQL語句有可能執行得挺快。

2.慢查詢優化的基本步驟

1)先運行看看是否真的很慢,注意設置SQL_NO_CACHE

2)where條件單表查,鎖定最小返回記錄表。這句話的意思是把查詢語句的where都應用到表中返回的記錄數最小的表開始查起,單表每個字段分別查詢,看哪個字段的區分度***

3)explain查看執行計劃,是否與1預期一致(從鎖定記錄較少的表開始查詢)

4)order by limit 形式的sql語句讓排序的表優先查

5)了解業務方使用場景

6)加索引時參照建索引的幾大原則

7)觀察結果,不符合預期繼續從1開始分析

2.優化原則

  • 查詢時,能不要*就不用*,盡量寫全字段名
  • 大部分情況連接效率遠大于子查詢
  • 多使用explain和profile分析查詢語句
  • 查看慢查詢日志,找出執行時間長的sql語句優化
  • 多表連接時,盡量小表驅動大表,即小表 join 大表
  • 在***分頁時使用limit
  • 對于經常使用的查詢,可以開啟緩存

數據庫表優化

  • 表的字段盡可能用NOT NULL
  • 字段長度固定的表查詢會更快
  • 把數據庫的大表按時間或一些標志分成小表
  • 將表拆分

數據表拆分:主要就是垂直拆分和水平拆分。

水平切分:將記錄散列到不同的表中,各表的結構完全相同,每次從分表中查詢, 提高效率。

垂直切分:將表中大字段單獨拆分到另外一張表, 形成一對一的關系。

總之:

Mysql的優化主要就在于:索引的優化,sql語句的優化,表的優化,在高并發網絡環境下,除了優化數據庫外,還會涉及到分布式緩存,CDN,數據庫讀寫分離等高并發優化技術。

以上就是MySQL的優化技術方案,以下是***阿里P8架構師談架構設計系列。 

阿里P8架構師談:MySQL慢查詢優化、索引優化、以及表等優化總結

責任編輯:龐桂玉 來源: 今日頭條
相關推薦

2020-10-26 11:41:47

kill代碼

2018-08-28 16:22:57

數據庫NoSQLSQL

2018-08-07 10:04:11

數據庫分布式緩存Redis

2018-08-28 12:37:27

數據庫數據庫中間件MySQL

2018-06-07 08:54:01

MySQL性能優化索引

2019-02-26 12:40:10

程序員架構師阿里

2020-10-19 19:45:58

MySQL數據庫優化

2010-06-12 15:31:04

MySQL查詢優化

2024-09-19 08:09:37

MySQL索引數據庫

2019-07-22 22:22:02

架構運維技術

2017-04-06 09:49:55

Hive注意事項優化

2024-10-09 23:32:50

2018-07-11 20:07:06

數據庫MySQL索引優化

2015-07-02 11:17:30

MySQLSlave延遲優化

2019-08-16 01:58:01

MySQL索引事務

2019-09-02 09:21:16

Zookeeper架構師集群

2014-04-09 18:01:42

京東

2017-05-23 16:26:26

MySQL優化處理

2018-06-20 13:14:16

MySQL數據優化查詢備忘錄

2012-09-20 10:13:04

MongoDB
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久免费 | 国产精品免费观看视频 | 久久久精品一区二区 | 视频一区二区三区在线观看 | 超碰成人av| 天天精品在线 | 国产内谢| 国产一区二区三区在线 | 天天插天天操 | 亚洲一区二区三区免费在线观看 | 色爱综合网 | 久日精品| japan21xxxxhd美女 日本欧美国产在线 | 成人在线观看免费 | 国产美女免费视频 | 看真人视频一级毛片 | 日韩精品久久 | 超碰国产在线 | 国产免费看 | 毛片在线视频 | 精品久久国产视频 | 欧美日韩亚洲国产综合 | 日本精品一区 | 日韩欧美一级 | 亚洲精品一区二区在线观看 | 免费黄色av | 久久久久久91香蕉国产 | 夜夜爽99久久国产综合精品女不卡 | 日韩精品一区二区三区在线播放 | 亚洲一级av毛片 | 国产日韩欧美一区 | 国产精品视频入口 | 亚州精品天堂中文字幕 | 久久99精品久久久久久琪琪 | 91精品国产色综合久久 | 日本午夜精品 | 亚洲国产欧美一区二区三区久久 | 欧美一区二区三区在线 | 国产伦精品一区二区三区四区视频 | 成人小视频在线观看 | 国产最新视频在线 |