精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

那些年我們經常嘮嗑的SQL優化

數據庫 其他數據庫
把對數據庫的讀寫操作分到不同的數據庫服務上,以實現數據庫的高性能和高并發能力;讀寫分離最大的弊端就是復制延遲,對于以查詢為主的項目比較合適,看項目進行取舍。

前言

我們出去面試經常會被問到數據庫這一塊,而涉及數據庫這一塊問的最多的就是數據庫優化。那么我們怎么做才能做好優化問題呢?今天我們就來聊聊數據庫優化那些事。

數據庫優化我們一般可以從以下幾個方面考慮:

  • 數據庫
  • 表設計
  • sql語句優化

數據庫

大型項目拆分為小項目,每個項目有自己獨立的數據庫

原來所有數據表都放在一個數據庫節點上,所有的讀寫請求也都發到這個MySQL上面,所以數據庫的負載太高。如果把一個節點的數據庫拆分成多個MySQL數據庫,這樣就可以有效的降低每個MySQL數據庫的負載。

分表分庫(取模分表、水平分表、垂直分表)

通過取模算法進行水平分表,例如總共有3張表, 1%3=1 放入第一張表,2%3=2,放入低二張表,3%3=0 放入第0張表,相當于用幾張表來平分一張表,最好的做法是一張主表,再來幾張字表。因為分表不好做分頁,數據存放在多張表中,所以需要一張主表用來存放所有的數據,當子表無法滿足時采用主表。

讀寫分離

把對數據庫的讀寫操作分到不同的數據庫服務上,以實現數據庫的高性能和高并發能力;讀寫分離最大的弊端就是復制延遲,對于以查詢為主的項目比較合適,看項目進行取舍。

表設計

數據庫表設計遵循三范式

第一范式:原子約束,每列不能再分

圖片

第二范式:每張表只描述一件事情,就是主鍵就對應著所有信息。

第三范式:要保證表中的數據和主鍵直接相關,而不是間接相關。比如訂單表中出現了快遞的屬性(快遞單號,收件人姓名、收貨地址),可以把收件人姓名和收貨地址提出來單獨放到一張表,只留快遞單號在訂單表中作為關聯。并不是所有的表設計都必須按照三大范式設計,具體需要根據需求來定

表字段設計

盡量設計成not null,盡量使用數字型字段(如性別,男:1 女:2),若只含數值信息的字段盡量不要設計為字符型,這會降低查詢和連接的性能,并會增加存儲開銷,字段長度設計合理,比如郵編,只需要位長度,沒必要過長,

用varchar/nvarchar 代替 char/nchar

因為首先變長字段存儲空間小,可以節省存儲空間,其次對于查詢來說,在一個相對較小的字段內搜索效率顯然要高些。不要以為 NULL 不需要空間,比如:char(100) 型,在字段建立時,空間就固定了, 不管是否插入值(NULL也包含在內),都是占用 100個字符的空間的,如果是varchar這樣的變長字段, null 不占用空間。

sql語句優化

  • 最大化使用索引,合理的創建索引情況下,最大化使用索引
  • 減少數據訪問:設置合理的字段類型
  • 返回更少的數據:只返回需要的字段和數據分頁處理
  • 減少交互次數:批量DML操作,函數存儲等減少數據連接次數
  • 盡量減少數據庫排序操作以及全表查詢

sql語句優化的時候首先,我們需要定位有沒有慢查詢慢查詢,顧名思義,執行很慢的查詢。有多慢?超過long_query_time參數設定的時間閾值(默認10s)

慢查詢基本配置

  • slow_query_log 啟動停止技術慢查詢日志
  • slow_query_log_file 指定慢查詢日志得存儲路徑及文件(默認和數據文件放一起)
  • long_query_time 指定記錄慢查詢日志SQL執行時間得伐值(單位:秒,默認10秒)
  • log_queries_not_using_indexes 是否記錄未使用索引的SQL
  • log_output 日志存放的地方【TABLE】【FILE】【FILE,TABLE】

mysql5.7以上的版本,在my.ini中配置慢查詢配置

# 啟動慢查詢日志
slow_query_log = ON
# 慢查詢日志存放地方
slow_query_log_file = D:\\software\\mysql\\mysql-5.7.24-winx64\\data\\logs\\show.log
# 設置慢查詢時間,默認10秒,我們此處設置為1秒,也就是超過1秒就是慢查詢
long_query_time = 1

通過下面命令查看下上面的配置:

  • show VARIABLES like '%slow_query_log%'
  • show VARIABLES like '%slow_query_log_file%'
  • show VARIABLES like '%long_query_time%'
  • show VARIABLES like '%log_queries_not_using_indexes%'
  • show VARIABLES like 'log_output'
  • set global long_query_time=1; -- 默認10秒,這里為了演示方便設置為1
  • set GLOBAL slow_query_log = 1; -- 開啟慢查詢日志
  • set global log_output='FILE' -- 項目開發中日志只能記錄在日志文件中,不能記表中

例如現在我執行 select sleep(2) 沉睡兩秒,超過我設置慢查詢時間1秒,就會會被記錄到慢查詢日志中如下

圖片

有查詢時間,以及慢查詢語句,當我們知道慢查詢語句了我們就可以針對性優化sql了。而針對sql的優化最多的就是添加索引了

索引

索引用來快速地尋找那些具有特定值的記錄,所有MySQL索引都以B-樹的形式保存。如果沒有索引,執行查詢時MySQL必須從第一個記錄開始掃描整個表的所有記錄,直至找到符合要求的記錄。表里面的記錄數量越多,這個操作的代價就越高。如果作為搜索條件的列上已經創建了索引,MySQL無需掃描任何記錄即可迅速得到目標記錄所在的位置。

索引原理:折半查找,減少全表掃描,索引文件中是一個B_tree ,索引的最大查找數為2^n次方,查找數獨比較快

我們可以使用explain分析SQL的執行計劃。該執行計劃可以模擬SQL優化器執行SQL語句,可以幫助我們了解到自己編寫SQL是否有用到索引。1)查看執行計劃 語法:explain + SQL語句 eg:explain select * from tb;

圖片

id :編號
select_type :查詢類型
table :表
type :類型
possible_keys :預測用到的索引
key :實際使用的索引
key_len :實際使用索引的長度
ref :表之間的引用
rows :通過索引查詢到的數據量
Extra :額外的信息

創建索引 create index index_name on table_name(colum_name...);

索引使用注意事項

索引加在常使用字段上,主鍵除外,主鍵自帶唯一索引,例如商品表查詢名字和價格比較多的情況,就在這兩個字段上加索引

盡量避免使用子查詢,用關聯查詢替代

select t1.name,(select sex from user u1 where u1.user_id = t1.user_id) as sex from userInfo t1 
改成
select t1.name,u1.sex from userInfo left join user u1 on u1.user_id = t1.user_id;

用in來替換or ,且含In的范圍查詢,放到where條件的最后,防止索引失效。select * from ep_product where channel_id = 1 or channel_id = 2 改成 select * from ep_product where channel_id in(1,2)

盡量不要使用or,否則索引失效

圖片

不要使用like "%%",會全表掃描,但是可以使用 like "_%",不以%開頭,會使用到索引進行查找 使用"%%"

圖片

使用"_%"

圖片

判斷是否為null不能用=,要用is null ,=null 不會使用索引,is null會使用索引

圖片

圖片

避免數據類型不一致,如果設置的是int類型,條件最好是傳入int類型,如果傳入String類型數據庫會先做轉換在執行sql

select * from product where id = "1"
select * from product where id = 1

最好不要給數據庫留 NULL,盡可能的使用 NOT NULL 填充數據庫,可以在 name 上設置默認值 0,確保表中 name 列沒有 null 值,然后這樣查詢:

select id from t where name = 0

分組的時候需要效率比較高就禁止使用排序、在group by 后面加上order by null

select channel_id,count(*) from ep_product  GROUP BY channel_id 
改成
select channel_id,count(*) from ep_product GROUP BY channel_id order by null

應盡量避免在 where 子句中對字段進行表達式操作,這將導致引擎放棄使用索引而進行全表掃描。

select * from product where sell_price/2 = 100
改成
select * from product where sell_price = 100*2

在使用索引字段作為條件時,如果該索引是復合索引,那么必須使用到該索引中的第一個字段作為條件時才能保證系統使用該索引,否則該索引將不會被使用,并且應盡可能的讓字段順序與索引順序相一致。

  • 復合索引,不要跨列或無序使用(左匹配原則)
  • 復合索引,盡量使用全索引匹配,也就是說,你建立幾個索引,就使用幾個索引

Update 語句,如果只更改1、2個字段,不要Update全部字段,否則頻繁調用會引起明顯的性能消耗,同時帶來大量日志

左關聯查詢,左表加索引,有關聯查詢,右表加索引

索引并不是越多越好,索引固然可以提高相應的 select 的效率,但同時也降低了 insert 及 update 的效率,因為 insert 或 update 時有可能會重建索引,所以怎樣建索引需要慎重考慮,視具體情況而定。

其他注意事項

  • 避免出現select *
  • 關聯查詢的表最好不超過3張,數據庫的性能更加重要,適當考慮規范性就好
  • 多表關聯查詢時,小表在前,大表在后。
  • 新增多條數據是避免使用
insert into user values(1,"張三");
insert into user values(2,"李四");
使用以下方式可以減少語句解析的操作
insert into user values(1,"張三"),(2,"李四");

總結

以上是小北給大家總結的部分數據庫優化的思路,有什么不對的地方歡迎大家在評論區提出和補充。

責任編輯:武曉燕 來源: Java技術指北
相關推薦

2021-07-14 11:13:46

線程性能優化阿里云

2015-09-15 09:24:55

2011-12-18 18:32:35

APP

2010-04-07 16:41:50

Oracle SQL優

2019-06-03 14:43:19

高考數據分析錄取率

2014-01-23 14:10:02

2012-07-27 13:36:00

Office操作系統

2015-05-25 09:53:27

DEMO CHINA

2016-04-26 11:35:53

2015-01-08 10:21:29

2013-06-08 13:52:29

蘋果WWDC2013

2018-10-27 14:49:25

2012-03-02 09:45:02

Ubuntu操作系統

2012-02-22 10:48:23

操作系統

2018-04-27 14:39:28

物聯網物聯網應用智能

2019-04-18 11:43:40

軟件卸載PC端

2016-07-15 11:34:56

技術產品譯文

2012-03-22 09:47:37

服務器操作系統OS

2011-11-25 14:03:30

預測技術2012

2020-03-18 14:28:43

偽概念手機真相
點贊
收藏

51CTO技術棧公眾號

欧美成人首页| 日本综合视频| 97成人超碰视| 国产99久久精品一区二区永久免费 | 精品国产一区二区三区麻豆免费观看完整版 | www.四虎在线| 国产免费不卡| 亚洲蜜臀av乱码久久精品蜜桃| 国产伦精品一区二区三| 无码人妻av一区二区三区波多野| 欧美一区二区三区高清视频| 欧美一区二区视频观看视频 | 正在播放国产对白害羞| 欧美.com| 色国产综合视频| 日韩精品久久一区二区| 日本天堂在线| 寂寞少妇一区二区三区| 97精品一区二区三区| 美女网站视频在线观看| 好吊日视频在线观看| 93久久精品日日躁夜夜躁欧美| 国产欧美中文字幕| 亚洲免费黄色网址| 亚洲最大av| 在线成人一区二区| 中文字幕一二三区| 老司机2019福利精品视频导航| 亚洲欧美乱综合| 日韩欧美精品一区二区| 亚洲欧美国产高清va在线播放| 亚洲国产精品一区制服丝袜| 亚洲免费视频一区二区| 成人久久久久久久久| 不卡av免费观看| 亚洲人成亚洲人成在线观看图片| 日韩欧美视频一区二区三区四区| 成人高清在线观看视频| 中文字幕精品视频在线| 色综合视频一区二区三区44| 欧美午夜丰满在线18影院| 少妇久久久久久被弄到高潮| 四虎久久免费| 中文字幕乱码亚洲精品一区| 欧美在线播放一区二区| 亚洲欧美日韩精品永久在线| 成人一区二区三区视频| 国产日韩精品一区二区| 在线观看亚洲黄色| 首页国产欧美日韩丝袜| 欧美一级免费视频| 欧美成人aaaaⅴ片在线看| 在线成人激情| 欧美另类交人妖| 欧美成人精品欧美一| 亚洲午夜精品一区 二区 三区| 日韩在线观看免费全集电视剧网站 | 成人免费观看av| 成人精品水蜜桃| 丰满岳乱妇国产精品一区| 国产高清不卡二三区| 97国产超碰| 欧美视频一二区| 成人av在线资源| 蜜桃网站成人| 福利在线视频导航| 中文字幕欧美三区| 中文字幕欧美日韩一区二区三区| 女女色综合影院| 亚洲精品国产第一综合99久久| 蜜臀在线免费观看| 午夜成年人在线免费视频| 亚洲一区二区成人在线观看| 成年女人18级毛片毛片免费| 不卡av免费观看| 色婷婷激情一区二区三区| 五月婷婷狠狠操| www一区二区三区| 亚洲精品在线网站| 亚洲av网址在线| 精品久久久中文字幕| 色婷婷综合久久久久中文字幕1| 亚洲天堂黄色片| 亚洲天堂久久| 国产精品69av| 国产婷婷一区二区三区久久| 粉嫩aⅴ一区二区三区四区| 精品不卡在线| 日本精品在线| 午夜欧美大尺度福利影院在线看| 国产偷人视频免费| 日韩综合av| 亚洲黄色在线看| 亚洲精品视频网址| 欧美日韩亚洲一区| 欧美在线性视频| 国产乱码精品一区二区三区精东| 成人午夜精品在线| 亚洲成人18| av福利在线导航| 欧美三级电影在线看| 亚洲区 欧美区| 国产欧美亚洲精品a| 欧美xxxx综合视频| 成年人av网站| 国产91丝袜在线播放0| 日韩hmxxxx| 波多野结衣在线观看| 欧美色图12p| 亚洲av成人精品一区二区三区| 日韩电影免费网站| 国外成人在线播放| 国产又粗又黄又爽| 久久综合九色综合97_久久久| 在线免费观看成人网| 国产精品xx| 日韩情涩欧美日韩视频| 影音先锋制服丝袜| 国产视频一区免费看| 亚洲v日韩v综合v精品v| 精彩国产在线| 欧美日韩国产丝袜另类| 三上悠亚 电影| 国产精品久久久久无码av| 38少妇精品导航| 亚洲国产精品久久久久爰性色| 国产精品久久久爽爽爽麻豆色哟哟| 欧美亚洲精品一区二区| 日韩在线精品强乱中文字幕| 中文字幕欧美视频在线| 亚洲另类在线观看| av不卡免费电影| 国产美女永久无遮挡| 国产精品一区二区免费福利视频 | 91精品国产91久久久久游泳池 | 国产精品主播在线观看| 欧美成人免费播放| 91精品国产乱码久久久| 国产喷白浆一区二区三区| 成熟了的熟妇毛茸茸| 91成人福利| 久精品免费视频| hs视频在线观看| 自拍偷拍亚洲激情| 日本在线播放一区二区| 欧美h版在线| 国产在线日韩在线| 午夜看片在线免费| 欧美另类一区二区三区| 呻吟揉丰满对白91乃国产区| 视频一区在线视频| 欧美亚洲免费在线| 欧洲一级精品| 在线观看日韩专区| 伊人免费在线观看高清版| 欧美激情在线观看视频免费| 在线看的黄色网址| 色琪琪久久se色| 91精品国产综合久久香蕉最新版| 97人人在线| 欧美一区二区视频在线观看2020| 视频这里只有精品| 成人免费黄色大片| 日韩av在线第一页| 欧美激情在线免费| 国产精品欧美亚洲777777| 香港伦理在线| 欧美一级欧美一级在线播放| 久久国产精品波多野结衣av| 成人午夜激情视频| 黄色av免费在线播放| 日韩精品诱惑一区?区三区| 成人性生交大片免费看视频直播 | 欧美在线激情视频| 国产女人在线观看| 欧美精品一级二级三级| 欧美另类视频在线观看| av在线播放不卡| 黑人粗进入欧美aaaaa| 国产精品久久久久久久久妇女| 粉嫩av一区二区三区免费观看| а√在线天堂官网| 这里只有视频精品| 国产成人精品无码高潮| 精品久久久久国产| 国产精品理论在线| 国产a区久久久| 日韩网址在线观看| 天天影视天天精品| 国产一区二区在线观看免费播放| 亚洲成人av观看| 久久中文字幕在线视频| 午夜在线视频观看| 欧美日韩一级二级| 黄色片视频网站| 中文字幕中文字幕一区| 人妻激情偷乱频一区二区三区| 三级亚洲高清视频| 黄色一级大片免费| 俺要去色综合狠狠| 国产精品一级久久久| 美女视频一区| 91精品国产高清久久久久久久久 | 精品欧美久久| 成人午夜电影免费在线观看| 456成人影院在线观看| 欧美国产视频一区二区| 成年人视频网站在线| 精品国产电影一区二区| 亚洲一区中文字幕永久在线| 亚洲成人一区二区在线观看| 久久久久麻豆v国产| 97精品国产露脸对白| 免费黄频在线观看| 久久一区亚洲| 日韩精品 欧美| 欧美理论在线| 在线不卡日本| 欧美丝袜激情| 欧美日韩国产综合视频在线| 伊人精品久久| 亚洲一区二区三区在线免费观看| 校园春色亚洲色图| 97在线视频免费看| 日本福利在线| 日韩av中文字幕在线| 亚洲精品18p| 欧美一区二区日韩一区二区| 中文字幕在线播放av| 色综合天天做天天爱| 日本五十熟hd丰满| 夜夜嗨av一区二区三区中文字幕| 99久久精品久久亚洲精品| 国产亚洲精品中文字幕| 风间由美一二三区av片| www.欧美日韩| 日本天堂在线播放| 国产成人在线影院| 国产精品自在自线| 久久电影网站中文字幕| 成人性生生活性生交12| 久久影院亚洲| 十八禁视频网站在线观看| 国产精品丝袜xxxxxxx| 午夜精品久久久久久久无码| 日韩亚洲在线| 国产午夜伦鲁鲁| 偷拍盗摄高潮叫床对白清晰| 91亚洲国产成人久久精品| 亚洲在线色站| 五月天激情综合网| 影音先锋男人的网站| 亚洲精品午夜av福利久久蜜桃| 99精品视频网站| 中文字幕一区二区三区乱码图片| 法国空姐在线观看免费| 欧美一区在线看| www.国产在线播放| 亚洲黄色大片| 久章草在线视频| 美女性感视频久久| 亚洲日本黄色片| 国产91露脸合集magnet| 精品一区二区三区四区五区六区| av中文字幕不卡| 蜜桃传媒一区二区亚洲| 国产精品免费视频观看| 91插插插插插插| 午夜视频久久久久久| 老熟妇一区二区三区| 欧美日韩国产精选| www.国产黄色| 日韩高清有码在线| 成人h小游戏| 欧美成人一区在线| 僵尸再翻生在线观看免费国语| 日本亚洲精品在线观看| 成人在线视频免费| 亚洲影院高清在线| 一二三四区视频| 99成人免费视频| 成人观看免费完整观看| 人妖欧美一区二区| 中文字幕无码毛片免费看| 成人精品小蝌蚪| 国产一二三四五区| 自拍偷在线精品自拍偷无码专区| 久久精品视频国产| 欧洲国内综合视频| 国产99视频在线| 亚洲女人天堂色在线7777| 免费网站成人| 欧美又大又硬又粗bbbbb| 日韩成人一区| 久久久久久欧美精品色一二三四| 日韩欧美伦理| 鲁一鲁一鲁一鲁一色| 日韩电影在线免费看| 美女又黄又免费的视频| 久久精品欧美一区二区三区不卡| 卡通动漫亚洲综合| 欧美性jizz18性欧美| a天堂在线视频| 中文日韩电影网站| 成人黄色动漫| 91嫩草免费看| 成人羞羞网站| 国内自拍在线观看| 国产东北露脸精品视频| 337人体粉嫩噜噜噜| 五月天一区二区| 97人人爽人人爽人人爽| 亚洲人成电影网站色…| 色爱综合区网| 国产在线视频2019最新视频| 国产一区99| 欧美精品99久久| 粉嫩嫩av羞羞动漫久久久 | 九九热爱视频精品视频| 国产一区二区三区在线免费| 另类中文字幕网| 偷拍夫妻性生活| 午夜免费久久看| 黑人精品一区二区三区| 日韩一级黄色av| 成人h在线观看| 欧美高清视频一区二区三区在线观看 | 亚洲第一男人av| 18av在线视频| 92福利视频午夜1000合集在线观看| 精品国产一区二区三区久久久蜜臀 | 色老头视频在线观看| 国产精品18久久久久久麻辣| 夜夜躁狠狠躁日日躁2021日韩| 777精品久无码人妻蜜桃| 国产91精品精华液一区二区三区| 爱爱视频免费在线观看| 欧美日韩国产色站一区二区三区| 国产h在线观看| 国产成一区二区| 国产99久久久国产精品成人免费| 缅甸午夜性猛交xxxx| zzijzzij亚洲日本少妇熟睡| 久草视频精品在线| 日韩欧美国产综合| 亚洲色图美国十次| 99re在线视频上| 欧美日韩蜜桃| 人妻体内射精一区二区三区| 亚洲国产日韩av| 四虎在线视频免费观看| 91国产精品视频在线| 欧美大胆a级| 97成人在线观看视频| 26uuu亚洲综合色| www.久久久久久久| 国产一区二区三区直播精品电影| 户外露出一区二区三区| 视频一区视频二区视频三区视频四区国产| 三级影片在线观看欧美日韩一区二区 | 日本在线中文字幕一区| 黄色av网址在线播放| 久久久一区二区三区| 波多野结衣小视频| 日韩性xxxx爱| 日韩欧美一级| 黄色免费视频大全| 久久久精品一品道一区| 亚洲天堂777| 欧美精品一区二区免费| aaa国产精品视频| 日本免费黄视频| 国产精品看片你懂得| 国产黄色高清视频| 97精品伊人久久久大香线蕉| 啪啪亚洲精品| av在线免费看片| 亚洲成人av中文| 成人av电影观看| 99久久久久国产精品免费| 99精品国产在热久久下载| 蜜桃无码一区二区三区| 69堂亚洲精品首页| av中文字幕电影在线看| 欧美一卡2卡3卡4卡无卡免费观看水多多| 久久99精品国产.久久久久久 | 色婷婷亚洲一区二区三区| 中文日本在线观看| 国产精品久久久久久久久久久久冷| 久久午夜激情| 日韩视频中文字幕在线观看| 日韩av在线高清| 亚洲一区av| 国产午夜福利视频在线观看| 国产精品久久久久久久久图文区| 成人免费视频国产| 国产精品福利久久久| 亚洲婷婷免费| 欧美一区二区三区观看| 亚洲国产精品99|