程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 詳解mysql樹立索引的應用方法及優缺陷剖析

詳解mysql樹立索引的應用方法及優缺陷剖析

編輯:MySQL綜合教程

詳解mysql樹立索引的應用方法及優缺陷剖析。本站提示廣大學習愛好者:(詳解mysql樹立索引的應用方法及優缺陷剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解mysql樹立索引的應用方法及優缺陷剖析正文


媒介

索引(index)是贊助MySQL高效獲得數據的數據構造。 它關於高機能異常症結,但人們平日會忘卻或誤會它。 索引在數據越年夜的時刻越主要。范圍小、負載輕的數據庫即便沒有索引,也能有好的機能, 然則當數據增長的時刻,機能就會降低很快。

為何要創立索引呢?

這是由於,創立索引可以年夜年夜進步體系的機能。

第1、經由過程創立獨一性索引,可以包管數據庫表中每行數據的獨一性。

第2、可以年夜年夜加速數據的檢索速度,這也是創立索引的最重要的緣由。

第3、可以加快表和表之間的銜接,特殊是在完成數據的參考完全性方面特殊成心義。

第4、在應用分組和排序子句停止數據檢索時,異樣可以明顯削減查詢平分組和排序的時光。

第5、經由過程應用索引,可以在查詢的進程中,應用優化隱蔽器,進步體系的機能。

或許會有人要問:增長索引有如斯多的長處,為何纰謬表中的每個列創立一個索引呢?這類設法主意雖然有其公道性,但是也有其單方面性。固然,索引有很多長處,然則,為表中的每個列都增長索引,長短常不明智的。

這是由於,增長索引也有很多晦氣的一個方面:

第1、創立索引和保護索引要消耗時光,這類時光跟著數據量的增長而增長。

第2、索引須要占物理空間,除數據表占數據空間以外,每個索引還要占必定的物理空間。假如要樹立聚簇索引,那末須要的空間就會更年夜。

第3、當對表中的數據停止增長、刪除和修正的時刻,索引也要靜態的保護,如許就下降了數據的保護速度。

甚麼樣的字段合適創立索引:

索引是樹立在數據庫表中的某些列的下面。是以,在創立索引的時刻,應當細心斟酌在哪些列上可以創立索引,在哪些列上不克不及創立索引。

普通來講,應當在這些列上創立索引,例如:

第1、在常常須要搜刮的列上,可以加速搜刮的速度;

第2、在作為主鍵的列上,強迫該列的獨一性和組織表中數據的分列構造;

第3、在常常用在銜接的列上,這些列重要是一些外鍵,可以加速銜接的速度;

第4、在常常須要依據規模停止搜刮的列上創立索引,由於索引曾經排序,其指定的規模是持續的;

第5、在常常須要排序的列上創立索引,由於索引曾經排序,如許查詢可以應用索引的排序,加速排序查詢時光;

第6、在常常應用在WHERE子句中的列下面創立索引,加速前提的斷定速度。

樹立索引,普通依照select的where前提來樹立,好比:select的前提是wheref1andf2,那末假如我們在字段f1或字段f2上簡歷索引是沒有效的,只要在字段f1和f2上同時樹立索引才有效等。

甚麼樣的字段不合適創立索引:

異樣,關於有些列不該該創立索引。普通來講,不該該創立索引的的這些列具有以下特色:

第一,關於那些在查詢中很少應用或許參考的列不該該創立索引。這是由於,既然這些列很少應用到,是以有索引或許無索引,

其實不能進步查詢速度。相反,因為增長了索引,反而下降了體系的保護速度和增年夜了空間需求。

第二,關於那些只要很多數據值的列也不該該增長索引。這是由於,因為這些列的取值很少,例如人事表的性別列,

在查詢的成果中,成果集的數據行占了表中數據行的很年夜比例,即須要在表中搜刮的數據行的比例很年夜。

增長索引,其實不能顯著加速檢索速度。

第三,關於那些界說為text,image和bit數據類型的列不該該增長索引。這是由於,這些列的數據量要末相當年夜,要末取值很少。

第四,當修正機能遠弘遠於檢索機能時,不該該創立索引。這是由於,修正機能和檢索機能是相互抵觸的。

當增長索引時,會進步檢索機能,然則會下降修正機能。當削減索引時,會進步修正機能,下降檢索機能。

是以,當修正機能遠弘遠於檢索機能時,不該該創立索引。

創立索引的辦法:

1、創立索引,例如createindex<索引的名字>ontable_name(列的列表);

2、修正表,例如altertabletable_nameaddindex[索引的名字](列的列表);

3、創立表的時刻指定索引,例如createtabletable_name([...],INDEX[索引的名字](列的列表));

檢查表中索引的辦法:

showindexfromtable_name;檢查索引

索引的類型及創立例子:

1.PRIMARYKEY(主鍵索引)

mysql>altertabletable_nameaddprimarykey(`column`)

2.UNIQUE或UNIQUEKEY(獨一索引)

mysql>altertabletable_nameaddunique(`column`)

3.FULLTEXT(全文索引)

mysql>altertabletable_nameaddfulltext(`column`)

4.INDEX(通俗索引)

mysql>altertabletable_nameaddindexindex_name(`column`)

5.多列索引(聚簇索引)

mysql>altertable`table_name`addindexindex_name(`column1`,`column2`,`column3`)

修正表中的索引:

altertabletablenamedropprimarykey,addprimarykey(fileda,filedb)

總結

有了索引,關於記載數目許多的表,可以進步查詢速度。然則索引是占用空間的,所以在樹立索引的時刻可以依據本文來參考,也許對你有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved