国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysql如何創建索引?mysql創建索引

2024-07-24 12:37:16
字體:
來源:轉載
供稿:網友

mysql 如何創建索引呢,這個其實很簡單 create index或者為己有字段增加索引 ALTER TABLE `table_name` ADD UNIQUE (`column`)即可了.

mysql索引作用

在索引列上,除了有序查找之外,數據庫利用各種各樣的快速定位技術,能夠大大提高查詢效率,特別是當數據量非常大,查詢涉及多個表時,使用索引往往能使查詢速度加快成千上萬倍.

mysql索引創建規則:

1、表的主鍵、外鍵必須有索引;

2、數據量超過300的表應該有索引;

3、經常與其他表進行連接的表,在連接字段上應該建立索引

4、經常出現在Where子句中的字段,特別是大表的字段,應該建立索引;

5、索引應該建在選擇性高的字段上;

6、索引應該建在小字段上,對于大的文本字段甚至超長字段,不要建索引;

7、復合索引的建立需要進行仔細分析;盡量考慮用單字段索引代替:

A、正確選擇復合索引中的主列字段,一般是選擇性較好的字段;

B、復合索引的幾個字段是否經常同時以AND方式出現在Where子句中?單字段查詢是否極少甚至沒有?如果是,則可以建立復合索引;否則考慮單字段索引;

C、如果復合索引中包含的字段經常單獨出現在Where子句中,則分解為多個單字段索引;

D、如果復合索引所包含的字段超過3個,那么仔細考慮其必要性,考慮減少復合的字段;

E、如果既有單字段索引,又有這幾個字段上的復合索引,一般可以刪除復合索引;

8、頻繁進行數據操作的表,不要建立太多的索引;

9、刪除無用的索引,避免對執行計劃造成負面影響; 以上是一些普遍的建立索引時的判斷依據。

一言以蔽之,索引的建立必須慎重,對每個索引的必要性都應該經過仔細分析,要有建立的依據。

因為太多的索引與不充分、不正確的索引對性能都毫無益處:在表上建立的每個索引都會增加存儲開銷,

索引對于插入、刪除、更新操作也會增加處理上的開銷。另外,過多的復合索引,在有單字段索引的情況下,

一般都是沒有存在價值的;相反,還會降低數據增加刪除時的性能,特別是對頻繁更新的表來說,負面影響更大。

2.創建索引

在執行CREATE TABLE語句時可以創建索引,也可以單獨用CREATE INDEX或ALTER TABLE來為表增加索引。

1.ALTER TABLE

ALTER TABLE用來創建普通索引、UNIQUE索引或PRIMARY KEY索引,代碼如下:

  1. ALTER TABLE table_name ADD INDEX index_name (column_list) 
  2.  
  3. ALTER TABLE table_name ADD UNIQUE (column_list) 
  4.  
  5. ALTER TABLE table_name ADD PRIMARY KEY (column_list) 

其中table_name是要增加索引的表名,column_list指出對哪些列進行索引,多列時各列之間用逗號分隔。索引名index_name可選,缺省時,MySQL將根據第一個索引列賦一個名稱。另外,ALTER TABLE允許在單個語句中更改多個表,因此可以在同時創建多個索引。

2.CREATE INDEX

CREATE INDEX可對表增加普通索引或UNIQUE索引,代碼如下:

  1. CREATE INDEX index_name ON table_name (column_list) 
  2.  
  3. 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內部作為一條語句處理,語法如下:

  1. DROP INDEX index_name ON talbe_name 
  2.  
  3. ALTER TABLE table_name DROP INDEX index_name 
  4.  //Vevb.com
  5. ALTER TABLE table_name DROP PRIMARY KEY 

其中,前兩條語句是等價的,刪除掉table_name中的索引index_name.

第3條語句只在刪除PRIMARY KEY索引時使用,因為一個表只可能有一個PRIMARY KEY索引,因此不需要指定索引名。如果沒有創建PRIMARY KEY索引,但表具有一個或多個UNIQUE索引,則MySQL將刪除第一個UNIQUE索引。

如果從表中刪除了某列,則索引會受到影響。對于多列組合的索引,如果刪除其中的某列,則該列也會從索引中刪除。如果刪除組成索引的所有列,則整個索引將被刪除。

5.查看索引,代碼如下:

  1. mysql> show index from tblname; 
  2.  
  3. 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:一些關于過引的常用語句

1.添加PRIMARY KEY(主鍵索引)

mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )

2.添加UNIQUE(唯一索引)

  1. mysql>ALTER TABLE `table_name` ADD UNIQUE ( 
  2. `column

3.添加INDEX(普通索引)

mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

4.添加FULLTEXT(全文索引)

mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`)

5.添加多列索引

mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 奇台县| 和硕县| 牡丹江市| 绩溪县| 饶阳县| 义马市| 景洪市| 昭觉县| 永平县| 娱乐| 汾阳市| 江北区| 道孚县| 茶陵县| 兰溪市| 唐海县| 苗栗市| 兴安县| 攀枝花市| 桦川县| 安陆市| 曲周县| 沈阳市| 抚州市| 彭泽县| 瑞金市| 淅川县| 满洲里市| 通化市| 多伦县| 沙湾县| 紫阳县| 嘉禾县| 台州市| 平罗县| 香河县| 屯留县| 黔东| 上林县| 通山县| 洪洞县|