日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

深入浅出Mysql(一)

發(fā)布時間:2023/12/10 数据库 69 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入浅出Mysql(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、慢查詢基礎:優(yōu)化數(shù)據(jù)訪問
對于低效率查詢,我們可以通過以下兩個步驟來分析總是有效的:
1、確認應用程序是否在檢索大量超過需要的數(shù)據(jù)。這通常意味著訪問了太多的行,當時有時候也可能訪問了太多的列
2、確認Mysql服務器層是否在分析大量超過需要的數(shù)據(jù)行
1.1 是否向數(shù)據(jù)庫請求了不需要的數(shù)據(jù)
典型案例
查詢不需要的記錄
在查詢時,Mysql會先返回全部結果集再進行計算,客戶端應用程序會接收全部的結果集數(shù)據(jù),然后拋棄其中大部分數(shù)據(jù)。最簡單有效的解決辦法在查詢后面加上limit
多表關聯(lián)返回所有列
總是取出全部列
重復查詢相同數(shù)據(jù)
比較好的解決辦法是將這個數(shù)據(jù)緩存起來,需要的時候從緩存中取
1.2 Mysql是否在掃描額外的記錄
對于Mysql,最簡單衡量查詢開銷的三個指標是:
響應時間
掃描的行數(shù)
返回的行數(shù)
一般Mysql能夠使用如下三種方式應用where條件,從好到壞一次為:
1、在索引中使用where條件來過濾不匹配記錄。這是在存儲引擎層完成。
2、使用索引覆蓋掃描(在Extra列中出現(xiàn)Using index)來返回記錄,直接從索引中過濾不需要的記錄并返回命中的結果。這是在Mysql服務器層完成的,但無需再過濾表的查詢記錄
3、從數(shù)據(jù)表中返回數(shù)據(jù),然后過濾不滿足條件的記錄(在Extra列出現(xiàn)Using where)。這在Mysql服務器層完成,Mysql需要先從數(shù)據(jù)表中讀出記錄然后過濾
2、重構查詢的方式
如果有機會盡量分解關聯(lián)查詢,這樣做的好處:
1、讓緩存效率更高
2、執(zhí)行單個查詢時減少了鎖的競爭
3、在應用層做關聯(lián),可以容易對數(shù)據(jù)庫進行拆分,更容易做到高性能擴展
4、減少冗余記錄查詢
Mysql的存儲引擎包括:Myisam、InnoDB、BDB、Memory、Merge、Example、NDB Cluster、CSV等,其中InnoDB和BDB提供事務安全表,其他存儲引擎都是非事務安全表。
下面介紹幾種常用的存儲引擎:
1、Myisam:默認的Mysql插件式存儲引擎,他是在Web、數(shù)據(jù)倉儲和其他應用環(huán)境下最常使用的存儲引擎之一
2、InnoDB:用于事務處理應用程序,具有眾多特性,包括ACID特性。
3、Memory:將所有的數(shù)據(jù)保存在RAM中,在需要快速查找引用和其他類似數(shù)據(jù)的環(huán)境下,可以提供極快的訪問
4、Merge:允許Mysql DBA或開發(fā)人員將一系列等同的Myisam表以邏輯方式組合在一起,并作為1個對象引用他們。對于數(shù)據(jù)倉儲等環(huán)境十分適合
選擇合適的數(shù)據(jù)類型
1、固定長度數(shù)據(jù)列char和可變長度數(shù)據(jù)列varchar
對于InnoDB存儲引擎,內部的行存儲格式沒有區(qū)分固定長度和可變長度列(所有的數(shù)據(jù)行都使用指向數(shù)據(jù)列值的頭指針),因此在本質上,使用固定長度不一定比可變長度簡單,建議使用varchar。他們的存儲差別如下:

如果Mysql運行在嚴格模式,超過列的長度值不保存,并且會出現(xiàn)錯誤。
2、text和blob
blob和text值在執(zhí)行了大量的刪除或更新操作的時候,刪除這種值會在數(shù)據(jù)表中留下很大的空洞,為了提高性能,建議定期使用optimize table功能對這類表進行碎片整理。
合成的散列索引對于那些blob或text數(shù)據(jù)列特別有用。用散列標識符值查找的速度比搜索blob列本身的速度快很多。
在不必要的時候避免檢索大型的blob或text值
把blob或text列分離到單獨的表中
索引的設計和使用
設計索引的原則
1、搜索的索引列不一定是索要選擇的列。也就是說,最適合索引的列是出現(xiàn)在where字句中的列,或連接字句中指定的列,而不是select關鍵字后的選擇列表中的列
2、使用唯一索引。
3、使用短索引。如果對串列進行索引,應該指定一個前綴長度,例如:如果一個char(200)的列,如果在前10個或20個字符內,多數(shù)值是唯一的,那么就不要對整個列進行索引,這樣可以節(jié)省內存。
4、利用最左前綴。
5、不要過度索引
6、考慮在列上進行比較類型。索引可用于<,<=,=,>=,>,between

總結

以上是生活随笔為你收集整理的深入浅出Mysql(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。