MySQL數據庫項目化教程(第2版)(微課版)課件 項目八 數據庫安全及性能優化_第1頁
MySQL數據庫項目化教程(第2版)(微課版)課件 項目八 數據庫安全及性能優化_第2頁
MySQL數據庫項目化教程(第2版)(微課版)課件 項目八 數據庫安全及性能優化_第3頁
MySQL數據庫項目化教程(第2版)(微課版)課件 項目八 數據庫安全及性能優化_第4頁
MySQL數據庫項目化教程(第2版)(微課版)課件 項目八 數據庫安全及性能優化_第5頁
已閱讀5頁,還剩97頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

MySQL數據庫項目化教程微課版V2項目八數據庫安全及性能優化項目任務知識目標學習目標任務一數據庫用戶管理任務二數據庫權限管理任務三數據庫性能優化(1)掌握創建用戶、刪除用戶的方法(2)掌握修改用戶密碼的方法(3)掌握用戶權限授予與回收的方法(4)掌握優化服務、分析數據表、優化查詢的方法能力目標素質目標學習目標(1)能夠創建用戶、刪除用戶(2)能夠修改用戶密碼(3)能夠授予與回收用戶權限(4)能夠優化服務器,分析表,以及優化查詢效率(1)形成自主好學的學習態度(2)養成務實解決問題的習慣(3)培養團隊協作的精神思政引領(素養提示)學習目標(1)了解數據庫管理員需要遵守的職業道德,日常工作過程中提高警惕性,遵守最高級別的安全措施,確保所有數據被保護在安全環境中運行。(2)數據庫管理員要有工匠精神,以保證數據的一致性、準確性、完整性和安全性,并為用戶提供高質量的服務,要確保客戶的問題得到及時解決和處理。知識導圖學習目標任務分析任務完成任務描述Part

2Part

3Part

1任務一數據庫用戶管理過渡頁任務分析任務完成Part

1Part

2Part

3任務描述MySQL數據庫系統中有兩類用戶,分別是root用戶和普通用戶。root用戶是管理員用戶,具有最高的權限,可以對整個數據庫系統進行管理操作,如創建用戶、刪除用戶、管理用戶的權限等。而普通用戶只能夠根據被賦予的某些權限進行管理操作。在MySQL8.0版本中經過代碼重構,優化器更加強大,新增了一些特性。8.0版本與先舊版本同時也存在不一樣的地方,特別是在創建用戶、修改密碼、授權等語句使用均有所不同。為了更好、更安全地管理數據庫,本任務以不同的方式進行創建用戶、修改用戶密碼,以及刪除用戶等操作。任務描述過渡頁任務分析任務完成Part

1Part

2Part

3任務描述安裝MySQL數據庫時,數據庫系統默認安裝一個名為mysql的數據庫,該數據庫不能刪除,否則系統將無法正常運行,mysql數據庫中包含了大量的表,如user表、coumns_piv表、host表、proc表、event表、servers表等,其中user表就是用戶管理表。任務分析user表中含有42個字段,其中在MySQL8.0版本中password字段更換成authentication_string字段,可以用以下語句查看該表中的信息:任務分析SELECT*FROMmysql.user;這些字段大致可以分為4類,具體如下。(1)用戶類字段當應用程序需要操作數據庫之前,必須先與數據庫建立連接,建立連接時用到的主機名、用戶名和密碼就是user表中的host、user、authentication_string字段,這些字段就是用戶類字段。建立數據庫連接時,輸入的信息必須與這3個字段的內容相匹配。用以下語句可查看user表中用戶類的字段內容:任務分析SELECThost,user,authentication_stringFROMmysql.user;(2)權限類字段在user表中,關于權限的字段有20多個,其中包括Select_priv、Insert_priv、Update_priv、Delete_priv、Create_priv等以priv結尾的字段,這些字段的權限對整個數據庫有效,它的取值只有N或Y,其中N表示該用戶不具有對應的權限,Y表示該用戶具有對應的權限。為了安全起見,普通用戶的權限默認是N,也就是說,如果普通用戶要具有相應的權限,必須把對應字段的值由N改為Y。可以通過以下語句查看以上幾個權限類字段的值。任務分析SELECTSelect_priv,Insert_priv,Update_priv,Delete_priv,Create_privFROMmysql.user;(3)安全類字段在user表中,有6個字段用于管理用戶的安全信息,具體如下。①ssl_tpye和ssl_cipher:用于加密。②x509_issuer和x509_subject:用于標識用戶。③plugin和authentication_string:用于存儲與授權相關的插件。任務分析(4)資源控制類字段在user表中,用于限制用戶使用資源的字段有4個,具體如下。①max_questions:表示每小時內允許用戶執行查詢數據庫操作的次數。②max_updates:表示每小時內允許用戶執行更新數據庫操作的次數。③max_connections:表示每小時內允許用戶執行連接數據庫操作的次數。④max_user_conntions:表示單個用戶同時連接數據庫的次數。任務分析過渡頁任務分析任務完成Part

1Part

2Part

3任務描述任務完成(1)使用CREATEUSER語句創建用戶使用CREATEUSER語句創建用戶是比較常用的方法,這種方法安全、準確、錯誤少,但是沒有任何權限的,如果需要設置權限,再借助其他授權語句設置權限。權限的管理將在后面的內容中詳細介紹。語法格式如下:1.創建用戶CREATEUSER'username'@'hostname'IDENTIFIEDBY'new_passwrod';任務完成【例8-1】使用CREATEUSER語句為數據庫創建一個用戶,用戶名為tc_user,密碼為tc123456。具體代碼如下所示:任務完成使用以上語句創建用戶之后,用SELECT語句驗證創建用戶是否成功,具體代碼如下所示:任務完成(2)使用INSERT語句創建用戶使用INSERT語句創建用戶,向user表中插入用戶信息,和向普通表中添加一條記錄一樣,但必須擁有對mysql.user表有INSERT權限。通常INSERT語句只添加host,user,authentication_string這3個字段的值。語法格式如下:1.創建用戶INSERTINTOmysql.user(host,user,authentication_string,ssl_cipher,x509_issuer,x509_subject)VALUES('hostname','username','password','','','');任務完成語法格式如下:1.創建用戶INSERTINTOmysql.user(host,user,authentication_string,ssl_cipher,x509_issuer,x509_subject)VALUES('hostname','username','password','','','');以上語法中,由于user表中的ssl_cipher、x509_issuer、x509_subject字段沒有默認值,所以需要為這3個字段添加一個值,值為空即可。任務完成【例8-2】使用INSERT語句為數據庫創建一個用戶,主機名為hostname,用戶名為username,密碼為password。具體代碼如下所示:1.創建用戶任務完成使用以上語句創建用戶之后,用SELECT語句驗證創建用戶是否成功,具體代碼如下所示:1.創建用戶任務完成2.刪除用戶在MySQL系統中,可以創建用戶,也可以刪除用戶,刪除用戶有兩種方式,分別為使用DROPUSER語句和使用DELETE語句,下面分別介紹這兩種方法。(1)使用DROPUSER語句刪除用戶使用DROPUSER語句刪除用戶時,需要具有DROPUSER的權限。語法格式如下:DROPUSER'username'@'hostname';任務完成2.刪除用戶【例8-3】使用DROPUSER語句刪除學生競賽項目管理系統數據庫中的tc_user用戶。具體代碼如下所示:任務完成2.刪除用戶使用以上語句刪除用戶之后,用SELECT語句驗證是否刪除成功,具體代碼如下所示:任務完成2.刪除用戶(2)使用DELETE語句刪除用戶使用DELETE語句刪除用戶與刪除普通表中的數據一樣,但必須具有DELETE的權限。語法格式如下:DELETEFROMmysql.userWHEREhost='hostname'ANDuser='username';任務完成2.刪除用戶【例8-4】使用DELETE語句刪除學生競賽項目管理系統數據庫中的username用戶。具體代碼如下所示:任務完成2.刪除用戶使用以上語句刪除用戶之后,用SELECT語句驗證是否刪除成功,具體代碼如下所示:任務完成3.修改用戶密碼在MySQL數據庫系統中,用戶密碼至關重要,一旦密碼泄漏給非法用戶,非法用戶就可能獲得或者破壞數據庫中的數據。所以密碼一旦丟失,就應該立即修改密碼。默認用戶root是管理員,root用戶不僅可以修改自己的密碼,還可以修改普通用戶的密碼,而普通用戶只能修改自己的密碼。修改用戶密碼的方法有如下幾種。任務完成3.修改用戶密碼(1)修改root用戶密碼①使用UPDATE語句修改密碼使用UPDATE語句修改root用戶的密碼和修改普通表中的數據一樣,root用戶的密碼保存在mysql.user表中,所以root用戶登錄到數據庫之后,就可以使用UPDATE語句修改密碼了。語法格式如下:UPDATEmysql.userSETauthentication_string='new_password'WHEREUser='username'ANDHost='hostname';任務完成3.修改用戶密碼【例8-5】通過使用UPDATE語句修改學生競賽項目管理系統數據庫中root用戶的密碼,新密碼為C123456。root用戶登錄到數據庫之后,執行SQL語句:任務完成3.修改用戶密碼②使用ALTER語句修改密碼root用戶在修改密碼時,可以在MySQL命令行窗口中執行ALTERUSER命令修改密碼。ALTER命令語法格式如下:ALTERUSER'username'@'hostname'IDENTIFIEDWITHmysql_native_passwordBY'new_password';任務完成3.修改用戶密碼【例8-6】在MySQL命令行窗口中,通過ALTER語句修改學生競賽項目管理系統數據庫中root用戶的密碼,新密碼為c123456。root用戶登錄到數據庫之后,執行SQL語句:任務完成3.修改用戶密碼③使用SET語句修改密碼除了前面兩種修改密碼的方法以外,還可以直接使用SET語句修改root的密碼,需要特別注意的是,使用SET語句修改的密碼是不加密的。語法格式如下:SETPASSWORD='new_password';任務完成3.修改用戶密碼【例8-7】在MySQL命令行窗口中,通過SET語句修改學生競賽項目管理系統數據庫中root用戶的密碼,新密碼為123456。具體代碼如下所示:任務完成3.修改用戶密碼(2)修改普通用戶的密碼root用戶除可以修改自己的密碼外,還具有修改普通用戶密碼的權限,root用戶可利用2種方式修改普通用戶的密碼,下面分別介紹。任務完成3.修改用戶密碼①使用UPDATE語句修改普通用戶的密碼使用UPDATE語句修改普通用戶的密碼與修改root用戶密碼的方法相同,修改成功后也要使用FLUSHPRIVILEGES語句重新加載權限表,否則修改之后的密碼無法生效。UPDATEmysql.userSETauthentication_string='new_password'WHEREUser='username'ANDHost='hostname';任務完成【例8-8】在MySQL命令行窗口中,通過UPDATE語句修改數據庫中sel_user用戶的密碼,新密碼為123123。具體代碼如下所示:3.修改用戶密碼任務完成3.修改用戶密碼②使用SET語句修改普通用戶的密碼使用SET語句修改普通用戶的密碼與root用戶的密碼語法格式基本相同,不同的是,需要加FOR子句指定要修改哪個用戶的密碼,語法格式如下。SETPASSWORDFOR'username'@'hostname'='new_password';任務完成【例8-9】在MySQL命令行窗口中,使用SET語句修改數據庫系統st_user用戶的密碼,新密碼為st123456。具體代碼如下所示:3.修改用戶密碼任務完成3.修改用戶密碼(3)普通用戶修改自己的密碼普通用戶也具有修改自己密碼的權限,方法與root修改密碼方法一樣,但需要先用有效的普通用戶名及原密碼登錄到MySQL,然后再使用SET語句修改自己的密碼,修改語法如下:SETPASSWORD=’new_password’;任務完成3.修改用戶密碼

【例8-10】普通用戶testuser通過原密碼st123456登錄到MySQL之后,將密碼改為123456,具體代碼如下所示:任務總結本任務主要介紹數據庫用戶管理,通過3個方面介紹了用戶的管理方式,一是以root用戶的身份采用2種方法創建普通用戶,以及采用2種方法刪除普通用戶;二是以root用戶的身份修改自己的密碼,以及修改普通用戶的密碼;三是普通用戶修改自己的密碼。通過以上的介紹,希望讀者學會利用root管理員用戶管理普通用戶的方法,了解普通用戶只能夠根據被賦予的某些權限進行管理操作。任務分析任務完成任務描述Part

2Part

3Part

1任務二數據庫權限管理過渡頁任務分析任務完成Part

1Part

2Part

3任務描述數據庫的安全關系到整個應用系統的安全,其很大程度上依賴于用戶權限的管理,數據庫的管理員應該為每個數據庫的普通用戶設置相應的權限。本任務主要涉及學生競賽項目管理系統數據庫用戶的權限管理,包括權限的授予、權限的查看、權限的回收。任務描述過渡頁任務分析任務完成Part

1Part

2Part

3任務描述

MySQL服務器通過MySQL權限表控制用戶對數據庫的訪問,MySQL權限表存放在mysql數據庫中,這些MySQL權限表包括user、db、table_priv、columns_priv、host等,下面分別介紹。①user權限表:記錄允許連接到服務器的用戶信息,里面的權限是全局級的。②db權限表:記錄各個用戶在各個數據庫上的操作權限。③table_priv權限表:記錄數據表級的操作權限。④columns_priv權限表:記錄數據列級的操作權限。⑤host權限表:配合db權限表對給定主機上數據庫級的操作權限進行更細致的控制。這個權限表不受GRANT和REVOKE語句的影響。任務分析下面對MySQL數據庫中的權限做如下具體說明。①INSERT權限:代表允許向表中插入數據,同時,在執行ANALYZETABLE、OPTIMIZETABLE、REPAIRTABLE語句時也需要INSERT權限。②DELETE權限:代表允許刪除行數據。③DROP權限:代表允許刪除數據庫、表、視圖。④EVENT權限:代表允許查詢、創建、修改、刪除MySQL事件。任務分析⑤EXECUTE權限:代表允許執行存儲過程和存儲函數。⑥FILE權限:代表允許在MySQL可以訪問的目錄中進行讀/寫磁盤文件的操作,可使用的命令包括LOADDATAINFILE,SELECT...INTOOUTFILE,LOADFILE()。⑦GRANTOPTION權限:代表允許此用戶授予或者回收其他用戶的權限。⑧INDEX權限:代表允許創建和刪除索引。⑨LOCK權限:代表允許對擁有SELECT權限的表進行鎖定,以防止其他鏈接對此表的讀或寫。任務分析過渡頁任務分析任務完成Part

1Part

2Part

3任務描述MySQL數據庫中的root用戶默認擁有權限,普通用戶默認不擁有權限。也就是說,普通用戶默認不能對數據庫進行增、刪、改、查等操作。在MySQL數據庫中,可以用GRANT語句為用戶授予權限,但是MySQL8.0以前的版本支持GRANT語句在授權的時候隱式的創建用戶,MySQL8.0以后版本必須先創建用戶再授權。任務完成1.MySQL權限的授予任務完成語法格式如下:GRANTprivileges[(columns)]ONdatabase.tableTO'username'@'hostname'WITHwith_option;1.MySQL權限的授予以上語法格式中,privileges表示權限的類型,columns表示權限作用的字段,可以省略,如果省略代表權限作用于整張表,database.table表示數據庫的表名,username表示數據庫的用戶名,hostname表示主機名,passwrod表示用戶的密碼。任務完成WITH后面的with_option有5個選項,具體如下。1.MySQL權限的授予①GRANTOPTION:將權限授予用戶。②MAX_QUERIES_PER_HOUR:一個用戶在一個小時內可以執行查詢的次數(基本包含所有語句)。③MAX_UPDATES_PER_HOUR:一個用戶在一個小時內可以執行修改的次數(僅包含修改數據庫或表的語句)。④MAX_CONNECTIONS_PER_HOUR:一個用戶在一個小時內可以連接MySQL的時間。⑤MAX_USER_CONNECTIONS:一個用戶在同一時間可以連接MySQL實例的數量。任務完成【例8-13】使用CREATE語句為學生競賽項目管理系統數據庫的用戶授權,使用戶名為st_user對competition數據庫中的所有表具有查詢和插入操作的權限,使用GRANTOPTION子句實現。具體代碼如下所示:1.MySQL權限的授予2.MySQL權限的查看任務完成在MySQL數據庫中,查看用戶權限的方法很簡單,直接用SHOWGRANTS語句即可,其中,root用戶需要用FOR子句指定查看的用戶。語法格式如下:SHOWGRANTSFOR'username'@'hostname';2.MySQL權限的查看任務完成【例8-14】使用SHOWGRANTS語句查看上一節中創建的st_user用戶的權限。具體代碼如下所示:3.MySQL權限的回收任務完成在MySQL數據庫中,權限授予某個用戶之后,還可以根據具體需要回收部分或者全部權限,使用REVOKE語句可實現權限的回收。語法格式如下:REVOKEprivileges[(columns)]ONdatabase.tableFROM'username'@'hostname';以上語法格式中,privileges表示權限的類型,columns表示權限作用的字段,可以省略,如果省略代表權限作用于整張表,database.table表示數據庫的表名,username表示數據庫的用戶名,hostname表示主機名。3.MySQL權限的回收任務完成【例8-15】使用REVOKE語句回收用戶st_user對學生競賽項目管理系統數據庫中所有表的INSERT權限。具體代碼如下所示:3.MySQL權限的回收任務完成以上語句執行成功之后,使用SHOWGRANTS語句查看st_suer用戶的權限,具體代碼如下所示:3.MySQL權限的回收任務完成使用REVOKE語句還可以一次性回收所有權限,語法格式如下:REVOKEALLprivileges,GRANTOPTIONFROM'username'@'hostname';3.MySQL權限的回收任務完成【例8-16】使用REVOKE語句回收用戶st_user的所有權限。以上語句執行成功之后,使用SHOWGRANTS語句查看st_user用戶的權限,具體代碼如下所示:任務總結本任務介紹學生競賽項目管理系統數據庫中用戶的權限管理,包括三個方面,一是權限的授予,二是權限的查看,三是權限的回收。數據庫權限的管理關系到整個應用系統的安全,在實際應用中,數據庫管理員應該為數據庫的每個普通用戶以最小權限原則設置相應的權限。任務分析任務完成任務描述Part

2Part

3Part

1任務三數據庫性能優化過渡頁任務分析任務完成Part

1Part

2Part

3任務描述本任務通過服務器優化、表結構優化、查詢優化等技術提高數據庫的整體性能,包括使用EXPLAIN語句對SELECT語句的執行效果進行分析,并通過分析提出優化查詢的方法;使用ANALYZETABLE語句分析表;使用CHECK語句檢查表;使用OPTIMIZETABLE語句優化表;使用REPAIRTABLE語句修復表等。任務描述過渡頁任務分析任務完成Part

1Part

2Part

3任務描述優化MySQL數據庫是一項非常重要的技術,是數據庫管理員的必備技能之一,不論是進行數據庫表結構的設計,還是創建索引,創建、查詢數據庫,都需要注意數據庫的性能優化,數據庫的性能優化包括很多方面,例如,優化MySQL服務器,優化數據庫表結構,優化查詢速度,優化更新速度等,其目的都是使MySQL數據庫運行速度更快,占用磁盤空間更小。任務分析過渡頁任務分析任務完成Part

1Part

2Part

3任務描述(1)通過修改MySQL的my.ini文件進行服務器的性能優化通過修改my.ini文件的配置可以提高服務器的性能。在MySQL配置文件中,索引的緩沖區大小默認為16M,可以修改這個值來提高索引的處理性能。例如,將默認值修改為256M。打開my.ini文件,直接在[mysqld]后面加一行代碼如下:任務完成1.優化MySQL服務器Key_buffer_size=256M若數據庫服務器的內存容量為4GB,推薦設置參數值如下:任務完成1.優化MySQL服務器sort_buffer_size=6M //排序查詢操作的緩沖區大小read_buffer_size=4M //讀查詢操作的緩沖區大小join_buffer_size=8M //聯合查詢操作的緩沖區大小query_cache_size=64M //查詢緩沖區的大小max_connections=800 //允許最大連接的進程數(1)為多表連接查詢添加中間表在進行數據查詢時,往往需要進行多表連接查詢,但如果經常進行多表連接查詢,會影響數據庫的性能。為提高數據庫性能,可以建立一個中間表。中間表的字段就是經常要查詢的來自多張表的字段,通過連接查詢,將數據插入中間表中,中間表的內容來自基表,在以后的查詢中,就可以直接查詢中間表,提高查詢速度。任務完成2.優化表結構與數據操作【例8-17】在數據庫competition中,假設要經常查詢學生的姓名、班級、院系信息,但這些字段分布在student、department、class三張數據表,每次查詢必須進行連接查詢,為了提高查詢效率,可以創建一張中間表,實現數據查詢的優化。具體操作如下:任務完成2.優化表結構與數據操作通過鏈接查詢,將數據插入中間表中,具體代碼如下所示:任務完成2.優化表結構與數據操作查詢此信息,只需要直接通過中間表student_info快速查詢。具體代碼如下所示:任務完成2.優化表結構與數據操作(2)增加冗余字段在創建數據表的時候,通過增加冗余字段,可以減少連接查詢,從而提高查詢性能,例如,在數據庫competition中,院系名存在于院系表department中,競賽項目表project中有院系表的主鍵dp_id,如果要查詢project表中已有的院系名,必須通過這兩張表的dp_id字段進行連接查詢,但這樣會增加數據庫的負擔。為了提高性能,在project表中增加冗余字段dp_name,用來存儲院系名,這樣就可以優化查詢的性能。任務完成2.優化表結構與數據操作3.設置合理的數據類型和屬性任務完成(1)合理設置字段類型在創建數據表時,字段的寬度可以設置得盡可能小,例如,數據庫competition中project表中的字段dp_address,考慮到地址信息的長度只有50個字符左右,因此沒必要將其數據類型設置為CHAR(255),而可以設置為CHAR(50)或者VARCHAR(50)。對于長度取值比較固定的字段,可以使用ENUM類型代替VARCHAR類型,如性別、民族、省份等,使用ENUM類型的處理速度更快。3.設置合理的數據類型和屬性任務完成(2)為每張表設置一個ID作為其主鍵在創建數據表時,可為表設置一個ID作為表的主鍵,并且設置為INT類型(推薦使用UNSIGNED)、自動增長(AUTO_INCREMENT)。(3)盡量避免定義字段為NULL根據實際情況,盡量將字段設置為NOTNULL,這樣在執行查詢時,數據庫就無須比較NULL值,從而提高查詢效率。4.優化插入記錄的速度任務完成有很多種方法可以優化插入記錄的速度,下面主要介紹兩種方法。(1)如果數據表中有大量記錄,可以采用先加載數據再建立索引的方法,如果已經建立了索引,可以先將索引禁止。原因是每當有新記錄要插入表時都會刷新索引,這樣會降低插入的速度。5.對表進行分析、檢查、優化和修復任務完成(1)使用ANALYZETABLE語句分析表MySQL的Optimizer(優化器)在優化SQL語句時,首先需要收集一些相關信息,其中就包括表的cardinality(散列程度),它表示某個索引對應的字段包含多少個不同的值,如果cardinality大于數據的實際散列程度,那么索引就基本失效了。可以使用SHOWINDEX語句查看索引的散列程度,語法格式如下:SHOWINDEXFROMtable_name;5.對表進行分析、檢查、優化和修復任務完成查看學生數據表索引的散列程度,具體代碼如下所示:5.對表進行分析、檢查、優化和修復任務完成(2)使用CHECKTABLE語句檢查表在實際應用數據庫的過程中,可能會遇到數據庫錯誤的情況,例如,數據寫入磁盤時出錯,或者數據庫沒有正常關閉。可以使用CHECKTABLE語句來檢查數據庫是否有錯誤,例如,檢查calss表是否有錯誤的SQL語句,具體代碼如下所示:5.對表進行分析、檢查、優化和修復任務完成(3)使用OPTIMIZETABLE語句優化表對數據表執行刪除操作時,數據所占用的磁盤空間不會立即收回,另外,利用VARCHAR定義的字段,長時間后也會產生碎片,這些碎片浪費了很大空間,同時也對查詢效率產生很大影響。使用OPTIMIZETABLE語句可以實現回收碎片的功能,提升查詢性能,達到優化的效果。5.對表進行分析、檢查、優化和修復任務完成例如,優化student表的SQL語句,具體代碼如下所示:5.對表進行分析、檢查、優化和修復任務完成(4)使用REPAIRTABLE語句修復表使用REPAIRTABLE語句可以修復表的索引,提高查詢索引的性能,例如,修復student表的SQL語句,具體代碼如下所示:6.優化查詢任務完成在MySQL數據庫中,可以使用EXPLAIN和DESCRIBE語句分析表,以幫助用戶選擇更好的索引,寫出更優化的查詢語句。(1)使用EXPLAIN語句分析表在MySQL中,捕捉性能問題最常用的方法就是打開慢查詢,定位執行效率差的SQL。當定位到一個SQL后,還需要知道該SQL的執行計劃,比如是全表掃描還是索引掃描,這些都需要通過EXPLAIN語句來完成。EXPLAIN語句是查看優化器如何決定查詢的主要方法,可以幫助我們深入了解MySQL基于開銷的優化器,還可以使我們獲得很多優化器考慮到的訪問策略的細節。6.優化查詢任務完成使用EXPLAIN語句優化student查詢,具體代碼如下所示:6.優化查詢任務完成表8-1對EXPLAIN語句輸出的相關信息進行了說明。列

值說

明idSELECT標識符select_typeSELECT類型:SIMPLE,PRIMARY,UNION,SUBQUERYtable輸出行分析表的表名partitions匹配的分區type連接類型(最重要,具體在圖8-2中說明)possible_keys可供選擇的索引key實際使用的索引key_len實際使用的索引長度ref與索引進行比較的字段,也就是關聯表使用的字段rows將要被檢查的估算的行數filtered被表條件過濾的行數的百分比Extra附件信息6.優化查詢任務完成EXPLAIN語句輸出的相關信息中,type最重要,它表示使用了哪種連接類別,是否使用了索引,它是使用EXPLAIN語句分析表的性能的重要指標之一,表8-2中列出了type常用的取值。參數值說明system表示表中只有一條記錄const表示表中有多條記錄,但只從中查詢一條記錄eq_ref表示多表連接時,后面的表使用了UNIQUE或者PRIMARYKEYref表示多表查詢時,后面的表使用了普通索引unique_subquery表示子查詢中使用了UNIQUE或者PRIMARYKEYindex_subquery表示子查詢中使用了普通索引range表示查詢語句給出了查詢范圍index表示對表中的索引進行了完整掃描,速度比較慢all表示對表中的數據全部掃描,速度非常慢6.優化查詢任務完成EXPLAIN語句輸出的相關信息中,除type外,Extra項也是關鍵指標之一,要想讓查詢盡可能快,應該注意Extra字段的取值情況,如表8-3所示。字段值說

明Distinct找到了與查詢條件匹配的第一條記錄后,就不再搜索其他記錄Notexists一旦找到了匹配的LEFTJOIN標準的行,就不再搜索其他記錄Rangecheckedforeachrecord沒有找到合適的索引,對于前一張表的每行連接,它會做一個檢驗,用于決定使用哪個索引,并且使用這個索引從表中取得記錄,這個過程不

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論