



下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、本文介紹了數(shù)據(jù)庫索引,及其優(yōu)、缺點。針對MySQ康引的特點、應用進行了詳細的描述。分析了如何避免MySQ吮法使用,如何使用EXPLAIN分析查詢語句,如何優(yōu)化MySQ康引的應用。索引是一種特殊的文件(InnoDB數(shù)據(jù)表上的索引是表空間的一個組成部分),它們包含著對數(shù)據(jù)表里所有記錄的引用指針。注:1索引不是萬能的!索引可以加快數(shù)據(jù)檢索操作,但會使數(shù)據(jù)修改操作變慢。每修改數(shù)據(jù)記錄,索引就必須刷新一次。為了在某種程序上彌補這一缺陷,許多SQL命令都有一個DELAY_KEY_WRITE這個選項的作用是暫時制止MySQL在該命令每插入一條新記錄和每修改一條現(xiàn)有之后立刻對索引進行刷新,對索引的刷新將等到全
2、部記錄插入/修改完畢之后再進行。在需要把許多新記錄插入某個數(shù)據(jù)表的場合,DELAY_KEY_WRITE項的作用將非常明顯。2另外,索引還會在硬盤上占用相當大的空間。因此應該只為最經常查詢和最經常排序的數(shù)據(jù)列建立索引。注意,如果某個數(shù)據(jù)列包含許多重復的內容,為它建立索引就沒有太大的實際效果。從理論上講,完全可以為數(shù)據(jù)表里的每個字段分別建一個索引,但MySQ把同一個數(shù)據(jù)表里的索引總數(shù)限制為16個。1 .InnoDB數(shù)據(jù)表的索引與MyISAMt據(jù)表相比,索引對InnoDB數(shù)據(jù)的重要性要大得多。在InnoDB數(shù)據(jù)表上,索引對InnoDB數(shù)據(jù)表的重要性要在得多。在InnoDB數(shù)據(jù)表上,索引不僅會在搜索數(shù)
3、據(jù)記錄時發(fā)揮作用,還是數(shù)據(jù)行級鎖定機制的危、基礎。數(shù)據(jù)行級鎖定的意思是指在事務操作的執(zhí)行過程中鎖定正在被處理的個別記錄,不讓其他用戶進行訪問。這種鎖定將影響到(但不限于)SELECTLOCKINSHAR網(wǎng)ODESELECTFORUPDATE令以及INSERTUPDATEDELETE令。出于效率方面的考慮,InnoDB數(shù)據(jù)表的數(shù)據(jù)行級鎖定實際發(fā)生在它們的索引上,而不是數(shù)據(jù)表自身上。顯然,數(shù)據(jù)行級鎖定機制只有在有關的數(shù)據(jù)表有一個合適的索引可供鎖定的時候才能發(fā)揮效力。2 .限制如果WEHERE旬的查詢條件里有不等號(WHEREcoloum!=.),MySQL等無法使用索引。類似地,如果WHERE句的
4、查詢條件里使用了函數(shù)(WHERDAY(column)=.),MySQ也將無法使用索引。在JOIN操作中(需要從多個數(shù)據(jù)表提取數(shù)據(jù)時),MySQLR有在主鍵和外鍵的數(shù)據(jù)類型相同時才能使用索引。如果WHERE句的查詢條件里使用比較操作符LIKE和REGEX,PMySQLR有在搜索模板的第一個字符不是通配符的情況下才能使用索引。比如說,如果查詢條件是LIKEabc%,MySQL等使用索引;如果查詢條件是LIKE%abc,MySQL將不使用索引。在ORDERB驟作中,MySQLR有在排序條件不是一個查詢條件表達式的情況下才使用索引。(雖然如此,在涉及多個數(shù)據(jù)表查詢里,即使有索引可用,那些索引在加快OR
5、DERBY面也沒什么作用)如果某個數(shù)據(jù)列里包含許多重復的值,就算為它建立了索引也不會有很好的效果。比如說,如果某個數(shù)據(jù)列里包含的凈是些諸如0/1或Y/N等值,就沒有必要為它創(chuàng)建一個索引。普通索引、唯一索引和主索引1 .普通索引普通索引(由關鍵字KEYINDE濕義的索引)的唯一任務是加快對數(shù)據(jù)的訪問速度。因此,應該只為那些最經常出現(xiàn)在查詢條件(WHEREcolumn=.)或排序條件(ORDERBYcolumn加的數(shù)據(jù)列創(chuàng)建索引。只要有可能,就應該選擇一個數(shù)據(jù)最整齊、最緊湊的數(shù)據(jù)列(如一個整數(shù)類型的數(shù)據(jù)列)來創(chuàng)建索引。2 .唯一索引普通索引允許被索引的數(shù)據(jù)列包含重復的值。比如說,因為人有可能同名,
6、所以同一個姓名在同一個員工個人資料”數(shù)據(jù)表里可能出現(xiàn)兩次或更多次。如果能確定某個數(shù)據(jù)列將只包含彼此各不相同的值,在為這個數(shù)據(jù)列創(chuàng)建索引的時候就應該用關鍵字UNIQUE它定義為一個唯一索引。這么做的好處:一是簡化了MySQL寸這個索引的管理工作,這個索引也因此而變得更有效率;二是MySQL會在有新記錄插入數(shù)據(jù)表時,自動檢查新記錄的這個字段的值是否已經在某個記錄的這個字段里出現(xiàn)過了;如果是,MySQL等拒絕插入那條新記錄。也就是說,唯一索引可以保證數(shù)據(jù)記錄的唯一性。事實上,在許多場合,人們創(chuàng)建唯一索引的目的往往不是為了提高訪問速度,而只是為了避免數(shù)據(jù)出現(xiàn)重復。3 .主索引在前面已經反復多次強調過:
7、必須為主鍵字段創(chuàng)建一個索引,這個索引就是所謂的主索引。主索引與唯一索引的唯一區(qū)別是:前者在定義時使用的關鍵字是PRIMARY是UNIQUE4 .外鍵索引如果為某個外鍵字段定義了一個外鍵約束條件,MySQlM會定義一個內部索引來幫助自己以最有效率的方式去管理和使用外鍵約束條件。5 .復合索引索引可以覆蓋多個數(shù)據(jù)列,如像INDEX(columnA,columnB)索弓I。這種索引的特點是MySQK以有選擇地使用一個這樣的索引。如果查詢操作只需要用到columnA數(shù)據(jù)列上的一個索引,就可以使用復合索引INDEX(columnA,columnB)。不過,這種用法僅適用于在復合索引中排列在前的數(shù)據(jù)列組合
8、。比如說,INDEX(A,B,C)可以當做A或(A,B)的索引來使用,但不能當做B、C或(B,C)的索引來使用。6 .索引的長度在為CHA序口VARCHAR型的數(shù)據(jù)列定義索引時,可以把索引的長度限制為一個給定的字符個數(shù)(這個數(shù)字必須小于這個字段所允許的最大字符個數(shù))。這么做的好處是可以生成一個尺寸比較小、檢索速度卻比較快的索引文件。在絕大多數(shù)應用里,數(shù)據(jù)庫中的字符串數(shù)據(jù)大都以各種各樣的名字為主,把索引的長度設置為1015個字符已經足以把搜索范圍縮小到很少的幾條數(shù)據(jù)記錄了。在為BLOBffiTEXT類型的數(shù)據(jù)列創(chuàng)建索引時,必須對索引的長度做出限制;MySQL所允許的最大索引長度是255個字符。全
9、文索引文本字段上的普通索引只能加快對出現(xiàn)在字段內容最前面的字符串(也就是字段內容開頭的字符)進行檢索操作。如果字段里存放的是由幾個、甚至是多個單詞構成的較大段文字,普通索引就沒什么作用了。這種檢索往往以LIKE%word的形式出現(xiàn),這對MySQ來說很復雜,如果需要處理的數(shù)據(jù)量很大,響應時間就會很長。這類場合正是全文索引(full-textindex)可以大顯身手的地方。在生成這種類型的索引時,MySQL等把在文本中出現(xiàn)的所有單詞創(chuàng)建為一份清單,查詢操作將根據(jù)這份清單去檢索有關的數(shù)據(jù)記錄。全文索引即可以隨數(shù)據(jù)表一同創(chuàng)建,也可以等日后有必要時再使用下面這條命令添加:ALTERTABLEtablen
10、ameADDFULLTEXT(column1,column2)有了全文索引,就可以用SELEC怖詢命令去檢索那些包含著一個或多個給定單詞的數(shù)據(jù)記錄了。下面是這類查詢命令的基本語法:SELECT*FROMtablenameWHEREMATCH(column1,column2)AGAINST(”word1“,word2“,word3”)上面這條命令將把column1和column2字段里有word1、word2和word3的數(shù)據(jù)記錄全部查詢出來。注解:InnoDB數(shù)據(jù)表不支持全文索引。查詢和索引的優(yōu)化只有當數(shù)據(jù)庫里已經有了足夠多的測試數(shù)據(jù)時,它的性能測試結果才有實際參考價值。如果在測試數(shù)據(jù)庫里只有
11、幾百條數(shù)據(jù)記錄,它們往往在執(zhí)行完第一條查詢命令之后就被全部加載到內存里,這將使后續(xù)的查詢命令都執(zhí)行得非???不管有沒有使用索引。只有當數(shù)據(jù)庫里的記錄超過了1000條、數(shù)據(jù)總量也超過了MySQH艮務器上的內存總量時,數(shù)據(jù)庫的性能測試結果才有意義。在不確定應該在哪些數(shù)據(jù)列上創(chuàng)建索引的時候,人們從EXPLAINSELEC命令那里往往可以獲得一些幫助。這其實只是簡單地給一條普通的SELEC命令加一個EXPLAIN關鍵字作為前綴而已。有了這個關鍵字,MySQL等不是去執(zhí)行那條SELEC命令,而是去對它進行分析。MySQL等以表格的形式把查詢的執(zhí)行過程和用到的索引(如果有的話)等信息列出來。在EXPLAI
12、N命令的輸出結果里,第1列是從數(shù)據(jù)庫讀取的數(shù)據(jù)表的名字,它們按被讀取的先后順序排列。type列指定了本數(shù)據(jù)表與其它數(shù)據(jù)表之間的關聯(lián)關系(JOIN)。在各種類型的關聯(lián)土系當中,效率最高的是system,然后依次是const、eq_ref、ref、range、index和All(All的意思是:對應于上一級數(shù)據(jù)表里的每二條記錄,這個數(shù)據(jù)表里的所有記錄都必須被讀取一遍-這種情況往往可以用一索引來避免)。possible_keys數(shù)據(jù)列給出了MySQL搜索數(shù)據(jù)記錄時可選用的各個索引。key數(shù)據(jù)列是MySQ戊際選用的索引,這個索引按字節(jié)計算的長度在key_len數(shù)據(jù)列里給出。比如說,對于一個INTEGE嗷據(jù)列的索弓I,這個字節(jié)長度將是4。如果用到了復合索引,在key_len數(shù)據(jù)列里還可以看到MySQlM體使用了它的哪些部分。作為一般規(guī)律,key_len數(shù)據(jù)列里的值越小越好(意思是更快)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 國家開放大學《汽車制造工藝學》形考任務1-4參考答案
- 電工(高級工)測試題(附答案)
- 初三古詩文測試題
- (一模)青島市2025年高三年級第一次適應性檢測地理試卷(含標準答案)
- 企業(yè)薪資避稅合同范例
- 電廠入廠安全教育
- 洗浴中心員工管理規(guī)章制度
- 公路護墻合同范例
- 公司舊車銷售合同范例
- 2025年胚毒滅活苗項目建議書
- 《冠心病護理》課件
- 江蘇省蘇州市2023-2024學年八年級上學期期末語文試題及答案
- ECharts數(shù)據(jù)可視化課件 第3章 柱狀圖和散點圖
- 老年人護理安全風險管理
- 建筑施工企業(yè)成本控制管理制度
- GB/T 44823-2024綠色礦山評價通則
- 音樂課《詠鵝》教案7篇
- 中學校園廣播聽力系統(tǒng)管理制度
- 《馬說》說課課件-2023-2024學年統(tǒng)編版語文八年級下冊
- 圓錐型套筒冠義齒修復工藝(可摘局部義齒修復工藝課件)
- 智鼎在線測評的題
評論
0/150
提交評論