中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

優化mysql性能及索引講析

發布時間:2020-04-30 11:17:14 來源:億速云 閱讀:236 作者:三月 欄目:數據庫

本文主要給大家簡單講講優化mysql性能及索引講析,相關專業術語大家可以上網查查或者找一些相關書籍補充一下,這里就不涉獵了,我們就直奔優化mysql性能及索引講析主題,希望可以給大家帶來一些實際幫助。            

一:數據庫的優化方面

1商業需求的影響

比如說論壇里的帖子統計,并且實時更新

從功能上來說通過命令   select  count*from 表名 可以得到結果,如果論壇每秒產生產生成千上萬條帖子,我們沒有采用myisam存儲而用的是innodb存儲;就算再好的設備也不可能很快的查詢出來。

注:在wherecount*)使用中myisaminnodb要快的多;因為myisam內置了一個計數器,count*)可以直接從計數器當中讀取,而innodb則要掃描全表。     

所以在innodb上執行count*)時一般伴隨where,而且where中要包含主鍵以外的索引列。

如果必須要實施更新就專門為這個功能創建一個表,要想查詢結果就專門查看這個表就好了;到時候每秒產生的上萬條帖子也是一種麻煩,反過來說但是到底有多少人會關注這個實時更新,如果把實時更新去掉就很容易實現;在通過創建統計表,每隔一定的時間去刷新便可以。這就是不合理的商業要求。

2:系統架構以及實現的影響

1)二進制多媒體數據

主要包括圖片、視屏、其他二進制文件,如果放到數據庫中數據空間資源消耗非常嚴重,另外一個就是消耗主機的cpu資源,因為數據庫本就不是處理這些的優勢,

解決辦法:可以將這些二進制多媒體數據放到一個專門的文本文件中,然后給數據庫做一個連接指向這個文本文件,實現數據庫調用多媒體文件,有不用消耗數據庫的空間和cpu資源。

2)超大文本數據

如果大的文本數據放到數據庫當中也會造成空間的占用浪費問題。

解決方法:可以使用非關系型數據庫進行存儲

3)查詢語句對性能的影響

每個sql語句在優化前后的性能差異也是各不相同

在數據庫管理軟件中,最大性能瓶頸就是在于磁盤io、也就是數據的存取操作上面,而對于同一份數據,當我們以不同的方式去查找某一點內容時候,所需的讀取數據量可能會有天壤之別,搜消耗的資源也區別很大

首先進行編寫一個腳本插入20000行的數據

優化mysql性能及索引講析 

優化mysql性能及索引講析 

比如執行sql語句時可以用explain來查看執行計劃:

 

優化mysql性能及索引講析 

使用其他方式再次查詢打開profiling功能,來查看sql的實際執行計劃

打開功能

優化mysql性能及索引講析 

開始查詢

 

優化mysql性能及索引講析 

優化mysql性能及索引講析 

查看profile對數據庫的cpublock,以及io的使用情況:

優化mysql性能及索引講析 

 

4)數據庫的schema(模式)設計對性能也有影響

5)硬件選擇對性能的影響

數據庫主機是存儲數據的地方,所以io性能必須要優先考慮,無論是什么數據庫都必須考慮的因素,當然和io相關的板卡

另外cpu的處理能力也不能忽視,企業中必須使用多核,另外內存也必須要大至少要64G

其實數據庫的優化不單單從物理方面進行提高配置,也包括邏輯化如連接數。。。,和商業的需求。總之就是系統架構最優化、邏輯結構精簡化、硬件設施理性化

 

二、索引的介紹以及創建和使用

 

什么是索引?

索引(index) 是幫助mysql高效獲取數據結構,幫助dba快速定位,簡單來說就相當于字典中的目錄

索引的類型在上章講過有三種{B-TreeR-TreeFull-Tree}類型、最常用的是B-Tree

這里主要介紹的是B-Tree的索引結構

優化mysql性能及索引講析 

如圖:這里只說重點、淺藍色的我們成為磁盤塊、可以看到每個磁盤塊包含幾個數據項,和指針(×××)其實真正的數據在葉子節點上,就是最下面的一層,而其他的不存放數據,只存放指引數據方向的索引而已。

例如:要查找29,首先把磁盤塊1,加載到內存,發生一次io,在內存中用二分查找確定291735之間,鎖定磁盤塊1p2指針,由此往下推算,直到第三層算出為止。

 

索引的優點:

mysql高效的運行,可以大大提高mysql的查詢效率,數據約束,快速定位

使用索引的代價:

1)需要加載到內存,以文件的形式存放在硬盤中,所以增加磁盤的開銷

2)寫數據,需要更新索引,對數據庫是很大的開銷,降低表更新、添加和刪除的速度

 

不建議使用索引的情況:

1)表記錄較少

2)索引的選擇性較低,指不重復的索引與表記錄數的比值,取值范圍(0-1),選擇性越高,索引價值越大

 

1:普通索引

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

create index index_name on tablenamecolumm1column2,。。。。。】)

2:唯一索引

和普通索引類似,不同的就是索引列的值必須唯一,但允許空值,指的就是null,如果是組合索引,列的值必須唯一。

create table tablenameid int not null,username varchar(16) not null,primary key(id);

3:組合索引

為了進一步提升mysql的效率,可以使用組合索引

create index index_name on table_namecolumn1column2column3);

這樣的組合索引效率高于單列的索引,而且采用的是最左前綴的結果。簡單理解就是從最左邊開始組合。

4:全文索引

只用于myisam表對文本域進行索引。字段包括charvarchartext

 

不過切記大容量的數據表,生成全文索引是一個非常消耗時間和硬盤的做法

 

查看索引

show  index  from  table_name

show  keys  from  table_name

創建索引的時機:

一般在wherejoin子句中需要建立索引

使用索引的注意事項:

某些情況下like 才需要建立索引,因為在一通配符%-開頭查詢時,mysql不會使用索引

select * from table-name where name like %admin’;

另外還有就是不能再列上進行運算

select * from users where YEAR(adddate)<2000;

強每個行上進行運算,將導致索引失效而進行全表掃描

可修改為select * from users where adddate<2000-10-4;

總結:

索引的優化過程中主要用于存在wherejoin子句當中

索引中的列的基數越大,索引的效果越好

使用的短索引,如果對字符串進行索引,應該指定一個前綴長度,可節省大量的索引空間,提升查詢的速度

優化mysql性能及索引講析就先給大家講到這里,對于其它相關問題大家想要了解的可以持續關注我們的行業資訊。我們的板塊內容每天都會捕捉一些行業新聞及專業知識分享給大家的。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临西县| 乌恰县| 海宁市| 永和县| 舒城县| 凉城县| 沐川县| 南靖县| 叶城县| 滨海县| 都江堰市| 马关县| 大安市| 马边| 新巴尔虎左旗| 巩义市| 麟游县| 张北县| 兴化市| 沅陵县| 清远市| 屯昌县| 彝良县| 仁寿县| 宣威市| 黎平县| 聂荣县| 沂水县| 科技| 东光县| 桐梓县| 新野县| 太和县| 南宫市| 剑川县| 洛宁县| 太仓市| 元谋县| 闵行区| 梧州市| 克拉玛依市|