索引優化手冊,面試專供

2021-10-12 03:31:34 字數 2610 閱讀 6155

90%程式設計師面試都用得上的索引優化手冊

多關於索引,分為以下幾點來講解:一、索引的概述(什麼是索引,索引的優缺點)二、索引的基本使用(建立索引)三、索引的基本原理(面試重點)四、索引的資料結構(b樹,hash)五、建立索引的原則(重中之重,面試必問!敬請收藏!)六、百萬級別或以上的資料如何刪除 目錄90%程式設計師面試都用得上的索引優化手冊

一、索引的概述1)什麼是索引?2)索引的優缺點:二、索引的基本使用

三、索引的基本原理(不想像別的文章那樣一大堆篇幅廢話)四、索引的資料結構(b樹,hash)1)b樹索引查詢方式:b+tree性質:2)雜湊索引

五、建立索引的原則(重中之重)百萬級別或以上的資料如何刪除

一、索引的概述1)什麼是索引?索引是一種特殊的檔案(innodb資料表上的索引是表空間的乙個組成部分),它們包含著對資料表裡所有記錄的引用指標。更通俗的說,索引就相當於目錄。當你在用新華字典時,幫你把目錄撕掉了,你查詢某個字開頭的成語只能從第一頁翻到第一千頁。累!把目錄還給你,則能快速定位!2)索引的優缺點:可以大大加快資料的檢索速度,這也是建立索引的最主要的原因。,且通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的效能。但是,索引也是有缺點的:索引需要額外的維護成本;因為索引檔案是單獨存在的檔案,對資料的增加,修改,刪除,都會產生額外的對索引檔案的操作,這些操作需要消耗額外的io,會降低增/改/刪的執行效率。二、索引的基本使用1)建立索引:(三種方式)第一種方式: 第二種方式:使用alter table命令去增加索引:alter table用來建立普通索引、unique索引或primary key索引。 其中table_name是要增加索引的表名,column_list指出對哪些列進行索引,多列時各列之間用逗號分隔。索引名index_name可自己命名,預設時,mysql將根據第乙個索引列賦乙個名稱。另外,alter table允許在單個語句中更改多個表,因此可以在同時建立多個索引。第三種方式:使用create index命令建立create index可對表增加普通索引或unique索引。(但是,不能建立primary key索引) 三、索引的基本原理(不想像別的文章那樣一大堆篇幅廢話)索引用來快速地尋找那些具有特定值的記錄。如果沒有索引,一般來說執行查詢時遍歷整張表。索引的原理很簡單,就是把無序的資料變成有序的查詢1、把建立了索引的列的內容進行排序2、對排序結果生成倒排表3、在倒排表內容上拼上資料位址鏈4、在查詢的時候,先拿到倒排表內容,再取出資料位址鏈,從而拿到具體資料

四、索引的資料結構(b樹,hash)1)b樹索引mysql通過儲存引擎取資料,基本上90%的人用的就是innodb了,按照實現方式分,innodb的索引型別目前只有兩種:btree(b樹)索引和hash索引。b樹索引是mysql資料庫中使用最頻繁的索引型別,基本所有儲存引擎都支援btree索引。通常我們說的索引不出意外指的就是(b樹)索引(實際是用b+樹實現的,因為在檢視表索引時,mysql一律列印btree,所以簡稱為b樹索引) 查詢方式:主鍵索引區:pi(關聯儲存的是資料的位址)按主鍵查詢,普通索引區:si(關聯的id的位址,然後再到達上面的位址)。所以按主鍵查詢,速度最快b+tree性質:1.)n棵子tree的節點包含n個關鍵字,不用來儲存資料而是儲存資料的索引。2.)所有的葉子結點中包含了全部關鍵字的資訊,及指向含這些關鍵字記錄的指標,且葉子結點本身依關鍵字的大小自小而大順序鏈結。3.)所有的非終端結點可以看成是索引部分,結點中僅含其子樹中的最大(或最小)關鍵字。4.)b+ 樹中,資料物件的插入和刪除僅在葉節點上進行。5.)b+樹有2個頭指標,乙個是樹的根節點,乙個是最小關鍵碼的葉節點。2)雜湊索引簡要說下,類似於資料結構中簡單實現的hash表(雜湊表)一樣,當我們在mysql中用雜湊索引時,主要就是通過hash演算法(常見的hash演算法有直接定址法、平方取中法、摺疊法、除數取餘法、隨機數法),將資料庫字段資料轉換成定長的hash值,與這條資料的行指標一併存入hash表的對應位置;如果發生hash碰撞(兩個不同關鍵字的hash值相同),則在對應hash鍵下以鍊錶形式儲存。當然這只是簡略模擬圖。 五、建立索引的原則(重中之重)索引雖好,但也不是無限制的使用,最好符合一下幾個原則1) 最左字首匹配原則,組合索引非常重要的原則,mysql會一直向右匹配直到遇到範圍查詢(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)順序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引則都可以用到,a,b,d的順序可以任意調整。2)較頻繁作為查詢條件的字段才去建立索引3)更新頻繁欄位不適合建立索引4)若是不能有效區分資料的列不適合做索引列(如性別,男女未知,最多也就三種,區分度實在太低)5)盡量的擴充套件索引,不要新建索引。比如表中已經有a的索引,現在要加(a,b)的索引,那麼只需要修改原來的索引即可。6)定義有外來鍵的資料列一定要建立索引。7)對於那些查詢中很少涉及的列,重複值比較多的列不要建立索引。8)對於定義為text、image和bit的資料型別的列不要建立索引。百萬級別或以上的資料如何刪除關於索引:由於索引需要額外的維護成本,因為索引檔案是單獨存在的檔案,所以當我們對資料的增加,修改,刪除,都會產生額外的對索引檔案的操作,這些操作需要消耗額外的io,會降低增/改/刪的執行效率。所以,在我們刪除資料庫百萬級別資料的時候,查詢mysql官方手冊得知刪除資料的速度和建立的索參數量是成正比的。所以我們想要刪除百萬資料的時候可以先刪除索引(此時大概耗時三分多鐘)然後刪除其中無用資料(此過程需要不到兩分鐘)刪除完成後重新建立索引(此時資料較少了)建立索引也非常快,約十分鐘左右。與之前的直接刪除絕對是要快速很多,更別說萬一刪除中斷,一切刪除會回滾。那更是坑了。

SEO兵書 搜尋引擎優化手冊

seo兵書 搜尋引擎優化手冊 高峰等編著 isbn 978 7 121 15819 3 2012年4月出版 定價 48.00元 16開 348頁 宣傳語 知識的聚寶盆,奮鬥者的踏腳板 內容簡介 本書是作者從事搜尋引擎優化多年以來的經驗總結,書中深度剖析了搜尋引擎優化的每個細節,包括關鍵字策略 url...

mysql 索引 手冊 MySQL 索引

mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...

全域性索引 字首索引 面試系列 索引種類與優化

索引雖然快,但是占用了額外的空間,所以需要有一定權衡 回表查詢 innodb的普通索引無法直接定位行記錄,所以普通索引的查詢過程是怎麼樣的呢?通常情況下,需要掃碼兩遍索引樹。這就是所謂的回表查詢,先定位主鍵值,再定位行記錄,它的效能較掃一遍索引樹更低。覆蓋索引 只需要在一棵索引樹上就能獲取sql所需...