閱讀259 返回首頁    go 阿裏雲 go 技術社區[雲棲]


mysql索引的使用傻瓜教程

mysql教程:索引的使用

1. 索引(index)是幫助MySQL高效獲取數據的數據結構。

 它對於高性能非常關鍵,但人們通常會忘記或誤解它。

 索引在數據越大的時候越重要。規模小、負載輕的數據庫即使沒有索引,也能有好的性能,  但是當數據增加的時候,性能就會下降很快。

Tip:蠕蟲複製,可以快速複製大量的數據

例:insert into emp select * from emp; 

mysql 索引

2. MySQL中常見的索引

 ◆普通索引 

 ◆唯一索引 

 ◆主鍵索引  

 ◆組合索引 

 ◆全文索引

 ◆外鍵 (隻有innodb存儲引擎才支持)

2.1普通索引:

這是最基本的索引,它沒有任何限製。有以下幾種創建方式:

有以下幾種創建方式:

◆創建索引

  CREATE INDEX indexName ON tablename(username(length)); 

◆修改表結構

  ALTER tablename  ADD INDEX indexName (username(length))

Tip:length可以小於字段實際長度;如果是BLOB 和 TEXT 類型,必須指定length ,下同

 ◆創建表的時候直接指定

 CREATE TABLE mytableuuu(   ID INT NOT NULL, username VARCHAR(16) NOT NULL,   INDEX indexName (username(length))   );  

 CREATE TABLE mytable(id INT NOT NULL,username VARCHAR(16) NOT NULL);

 create index index1 on mytable(id);  //創建普通索引

mysql 索引

 

◆刪掉索引:

  drop index index1 on mytable;

有一個概念,

行定義:在聲明字段(列)的時候定義的,比如primary key

表定義:在所有字段(列)聲明完之後定義的,比如primary key,index

CREATE TABLE mytable(id INT NOT NULL,username VARCHAR(16) NOT NULL,index index1(username));

3.0唯一索引(unique)

索引列的值必須唯一,但允許有空值。

1)創建索引:Create UNIQUE INDEX indexName ON tableName(tableColumns(length))

2)修改表結構:Alter tableName ADD UNIQUE [indexName] ON (tableColumns(length)

3)創建表的時候直接指定:Create TABLE tableName ( [...], UNIQUE [indexName](tableColumns(length)); 

4.0主鍵索引(primary  key)

它是一種特殊的唯一索引,不允許有空值。一般是在建表的時候同時創建主鍵索引:

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL,   PRIMARY KEY(ID)   );  

當然也可以用 ALTER 命令。

Tip:記住:一個表隻能有一個主鍵。主鍵索引就是我們所說的主鍵。在一個表中,主鍵隻能有一個,但是普通索引和唯一索引可以有多個。

5.0組合索引

5.1多列索引,由多個列共同來組成一個索引。

增加組合索引

alter table mytable add index name_city_age(username,city,age);

對於組合索引,必須以最左索引為前綴,依次排列的,才可以使用到組合索引,中間不能有間隔。

下麵的可以使用到組合索引:

  ◆ username,city,age   

  ◆ usernname,city   

  ◆ usernname 

下麵的不可以使用到組合索引:

  ◆ city,age   

  ◆ city   

  ◆ age 

注意組合索引,如果在某個表中,有多個索引,我們可以考慮一下,使用組合索引來優化。

5.2 Explain語句:可以查詢sql 查詢語句使用的索引類型

explain 語句
 

6. 為什麼有索引,查詢加快?

6.1在MySQL中,BTREE,二叉樹

 

二叉樹排序
35   17  39 9 28 65 56 87
  二叉樹                                  

6.2索引的優點:

加快查詢速度。

6.2 索引的缺點:

占用大量的磁盤空間。

但是對插入、刪除和更新有影響。

 
\

6.3使用索引時,有以下一些技巧和注意事項:

◆索引不會包含有NULL值的列

隻要列中包含有NULL值都將不會被包含在索引中,複合索引中隻要有一列含有NULL值,那麼這一列對於此複合索引就是無效的。所以我們在數據庫設計時不要讓字段的默認值為NULL。

◆使用短索引

對串列進行索引,如果可能應該指定一個前綴長度。例如,如果有一個CHAR(255)的列,如果在前10個或20個字符內,多數值是惟一的,那麼就不要對整個列進行索引。短索引不僅可以提高查詢速度而且可以節省磁盤空間和I/O操作。

◆索引列排序

MySQL查詢隻使用一個索引,因此如果where子句中已經使用了索引的話,那麼order by中的列是不會使用索引的。因此數據庫默認排序可以符合要求的情況下不要使用排序操作;盡量不要包含多個列的排序,如果需要最好給這些列創建複合索引。

◆like語句操作

一般情況下不鼓勵使用like操作,如果非使用不可,如何使用也是一個問題。like “%aaa%” 不會使用索引,而like “aaa%”可以使用索引。

◆不要在列上進行運算

select * from users where YEAR(adddate)<2007; 將在每個行上進行運算,這將導致索引失效而進行全表掃描,因此我們可以改成

select * from users where adddate<‘2007-01-01’; 

◆不使用NOT IN和<>操作


https://www.php100.com/html/webkaifa/database/Mysql/2013/0316/12223.html

最後更新:2017-04-03 22:15:30

  上一篇:go 收緊還是開放?Android 後魯賓時代之變
  下一篇:go 2011年全國軟件大賽模擬題及參考答案(Java本科組)