mysql索引
索引優化
1.什么是索引?
索引是對數據庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問數據庫表中的特定信息。
2.作用是什么?
索引的作用相當於圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容,提高性能(查詢速度)。
3.如何設置索引?
create [unique] index 索引名
on 表名稱 (字段名[(長度)]);
//unique 唯一性 不允許具有索引值相同的行,從而禁止重復的索引或鍵值
4.刪除索引
drop index 索引名 on 表名稱;
5.索引和普通查詢的區別?
比如,查詢一個學校所有學生的成績,將不及格的學生姓名和成績顯示下來。
普通查詢方法:
select name,[成績字段] from [表名] where [成績字段]<60;
查詢的過程:
數據庫將所有學生的成績全部查詢一遍,將不及格的學生顯示出來。
數據量小看不出區別,如果數據量達到百萬,需要將所有學成全部查出,耗時非常大。
索引查詢:
首先建立一個索引,create index 索引名 on 表名(成績字段); 如果數據多,創建索引時會消耗大量時間,和內存。
再次查詢select name,(成績字段) from (表名) where 成績字段<60;
查詢過程:
索引將表中的數據排序,查詢時列表有成績10,30,60,70,100。
查詢時,查到60的時候,將不再向后查詢。節省時間。
普通索引(INDEX),主鍵索引(PRIMARY),全文索引()和唯一索引(UNIQUE)有什么區別?
唯一性索引:這種索引和“普通索引”基本相同,但有一個區別:索引列的所有值都只能出現一次,即必須唯一
補充:
索引是如何排序的?
數字索引:默認升序排序
文字索引:根據ASCII,漢字的機內碼(不懂的問度娘)
多列索引:
查詢條件是兩條,多列索引比單列索引
創建索引:
1.經常需要搜索的列上,可以加快搜索的速度;
2.作為主鍵的列上,強制該列的唯一性和組織表中數據的排列結構;
3.經常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度;
4.經常需要根據范圍進行搜索的列上創建索引,因為索引已經排序,其指定的范圍是連續的;
5.經常需要排序的列上創 建索引,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間;
6.經常使用在WHERE子句中的列上面創建索引,加快條件的判斷速度。
索引的優缺點?
優點:
1.通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性。
2.可以大大加快數據的檢索速度,這也是創建索引的最主要的原因。
3.可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。
4.在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。
5.通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。
缺點:
1.創建索引和維護索引要耗費時間,這種時間隨着數據量的增加而增加。
2.索引需要占物理空間,除了數據表占數據空間之外,每一個索引還要占一定的物理空間,如果要建立聚集索引那么需要的空間就會更大。
3.當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。
因為索引非常占內存,所以索引也需要謹慎添加,那些字段需要索引。