程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL檢查、創立和刪除索引的辦法

MySQL檢查、創立和刪除索引的辦法

編輯:MySQL綜合教程

MySQL檢查、創立和刪除索引的辦法。本站提示廣大學習愛好者:(MySQL檢查、創立和刪除索引的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL檢查、創立和刪除索引的辦法正文


本文實例講述了MySQL檢查、創立和刪除索引的辦法。分享給年夜家供年夜家參考。詳細以下:

1.索引感化

在索引列上,除下面提到的有序查找以外,數據庫應用各類各樣的疾速定位技巧,可以或許年夜年夜進步查詢效力。特殊是當數據量異常年夜,查詢觸及多個表時,應用索引常常能使查詢速度加速不計其數倍。

例如,有3個未索引的表t1、t2、t3,分離只包括列c1、c2、c3,每一個表分離含有1000行數據構成,指為1~1000的數值,查找對應值相等行的查詢以下所示。

SELECT c1,c2,c3 FROM t1,t2,t3 WHERE c1=c2 AND c1=c3
此查詢成果應當為1000行,每行包括3個相等的值。在無索引的情形下處置此查詢,必需尋覓3個表一切的組合,以便得出與WHERE子句相配的那些行。而能夠的組合數量為1000×1000×1000(十億),明顯查詢將會異常慢。

假如對每一個表停止索引,就可以極年夜地加快查詢過程。應用索引的查詢處置以下。

(1)從表t1當選擇第一行,檢查此行所包括的數據。
(2)應用表t2上的索引,直接定位t2中與t1的值婚配的行。相似,應用表t3上的索引,直接定位t3中與來自t1的值婚配的行。
(3)掃描表t1的下一行偏重復後面的進程,直到遍歷t1中一切的行。

在此情況下,依然對表t1履行了一個完整掃描,但可以或許在表t2和t3長進行索引查找直接掏出這些表中的行,比未用索引時要快一百萬倍。
應用索引,MySQL加快了WHERE子句知足前提行的搜刮,而在多表銜接查詢時,在履行銜接時加速了與其他表中的行婚配的速度。

2.  創立索引

在履行CREATE TABLE語句時可以創立索引,也能夠零丁用CREATE INDEX或ALTER TABLE來為表增長索引。

1.ALTER TABLE

ALTER TABLE用來創立通俗索引、UNIQUE索引或PRIMARY KEY索引。

ALTER TABLE table_name ADD INDEX index_name (column_list)
ALTER TABLE table_name ADD UNIQUE (column_list)
ALTER TABLE table_name ADD PRIMARY KEY (column_list)

個中table_name是要增長索引的表名,column_list指出對哪些列停止索引,多列時各列之間用逗號分隔。索引名index_name可選,缺省時,MySQL將依據第一個索引列賦一個稱號。別的,ALTER TABLE許可在單個語句中更改多個表,是以可以在同時創立多個索引。

2.CREATE INDEX

CREATE INDEX可對表增長通俗索引或UNIQUE索引。

CREATE INDEX index_name ON table_name (column_list)
CREATE UNIQUE INDEX index_name ON table_name (column_list)

table_name、index_name和column_list具有與ALTER TABLE語句中雷同的寄義,索引名弗成選。別的,不克不及用CREATE INDEX語句創立PRIMARY KEY索引。

3.索引類型

在創立索引時,可以劃定索引可否包括反復值。假如不包括,則索引應當創立為PRIMARY KEY或UNIQUE索引。關於單列唯一性索引,這包管單列不包括反復的值。關於多列唯一性索引,包管多個值的組合不反復。

PRIMARY KEY索引和UNIQUE索引異常相似。現實上,PRIMARY KEY索引僅是一個具著名稱PRIMARY的UNIQUE索引。這表現一個表只能包括一個PRIMARY KEY,由於一個表中弗成能具有兩個同名的索引。

上面的SQL語句對students表在sid上添加PRIMARY KEY索引。

ALTER TABLE students ADD PRIMARY KEY (sid)

4.  刪除索引

可應用ALTER TABLE或DROP INDEX語句來刪除索引。相似於CREATE INDEX語句,DROP INDEX可以在ALTER TABLE外部作為一條語句處置,語法以下。

DROP INDEX index_name ON talbe_name
ALTER TABLE table_name DROP INDEX index_name
ALTER TABLE table_name DROP PRIMARY KEY

個中,前兩條語句是等價的,刪除失落table_name中的索引index_name。
第3條語句只在刪除PRIMARY KEY索引時應用,由於一個表只能夠有一個PRIMARY KEY索引,是以不須要指定索引名。假如沒有創立PRIMARY KEY索引,但表具有一個或多個UNIQUE索引,則MySQL將刪除第一個UNIQUE索引。
假如從表中刪除某列,則索引會遭到影響。關於多列組合的索引,假如刪除個中的某列,則該列也會從索引中刪除。假如刪除構成索引的一切列,則全部索引將被刪除。

5.檢查索引

mysql> show index from tblname;
mysql> show keys from tblname;

· Table
表的稱號。
· Non_unique
假如索引不克不及包含反復詞,則為0。假如可以,則為1。
· Key_name
索引的稱號。
· Seq_in_index
索引中的列序列號,從1開端。
· Column_name
列稱號。
· Collation
列以甚麼方法存儲在索引中。在MySQL中,有值‘A'(升序)或NULL(無分類)。
· Cardinality
索引中獨一值的數量的估量值。經由過程運轉ANALYZE TABLE或myisamchk -a可以更新。基數依據被存儲為整數的統計數據來計數,所以即便關於小型表,該值也沒有需要是准確的。基數越年夜,當停止結合時,MySQL應用該索引的機遇就越年夜。
· Sub_part
假如列只是被部門地編入索引,則為被編入索引的字符的數量。假如整列被編入索引,則為NULL。
· Packed
指導症結字若何被緊縮。假如沒有被緊縮,則為NULL。
· Null
假如列含有NULL,則含有YES。假如沒有,則該列含有NO。
· Index_type
用過的索引辦法(BTREE, FULLTEXT, HASH, RTREE)。
· Comment

彌補:針對SQL語句的檢查與處置,本站還供給了SQL語句在線格局化丑化對象供年夜家參考應用:

SQL代碼在線格局化丑化對象:http://tools.jb51.net/code/sqlcodeformat

願望本文所述對年夜家的MySQL數據庫法式設計有所贊助。

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