以下的文章主要介紹的是mysql資料庫索引型別,其中包括普通索引,唯一索引,主鍵索引與主鍵索引,以及對這些索引的實際應用或是建立有乙個詳細介紹,以下就是文章的主要內容描述。
(1)普通索引
這是最基本的mysql資料庫索引,它沒有任何限制。它有以下幾種建立方式:
建立索引
create index indexname on mytable(username(length));
如果是char,varchar型別,length可以小於字段實際長度;如果是blob和text型別,必須指定 length,下同。
修改表結構
alter mytable add index [indexname] on (username(length)) 建立表的時候直接指定
create table mytable( id int not null, username varchar(16) not null, index [indexname] (username(length)) );
刪除索引的語法:
drop index [indexname] on mytable;
(2)唯一索引
它與前面的普通索引類似,不同的就是:mysql資料庫索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。它有以下幾種建立方式:
建立索引
create unique index indexname on mytable(username(length)) 修改表結構
alter mytable add unique [indexname] on (username(length)) 建立表的時候直接指定
create table mytable( id int not null, username varchar(16) not null, unique [indexname] (username(length)) );
(3)主鍵索引
它是一種特殊的唯一索引,不允許有空值。一般是在建表的時候同時建立主鍵索引:
create table mytable( id int not null, username varchar(16) not null, primary key(id) );
當然也可以用 alter 命令。記住:乙個表只能有乙個主鍵。
(4)組合索引
為了形象地對比單列索引和組合索引,為表新增多個字段:
create table mytable( id int not null, username varchar(16) not null, city varchar(50) not null, age int not null );
為了進一步榨取mysql的效率,就要考慮建立組合索引。就是將 name, city, age建到乙個索引裡:
alter table mytable add index name_city_age (name(10),city,age); 建表時,usernname長度為 16,這裡用 10。這是因為一般情況下名字的長度不會超過10,這樣會加速索引查詢速度,還會減少索引檔案的大小,提高insert的更新速度。
如果分別在 usernname,city,age上建立單列索引,讓該錶有3個單列索引,查詢時和上述的組合索引效率也會大不一樣,遠遠低於我們的組合索引。雖然此時有了三個索引,但mysql只能用到其中的那個它認為似乎是最有效率的單列索引。
建立這樣的組合索引,其實是相當於分別建立了下面三組組合mysql資料庫索引:
usernname,city,age usernname,city usernname 為什麼沒有 city,age這樣的組合索引呢?這是因為mysql組合索引「最左字首」的結果。簡單的理解就是只從最左面的開始組合。並不是只要包含這三列的查詢都會用到該組合索引,下面的幾個sql就會用到這個組合mysql資料庫索引:
select * from mytable whree username="admin" and city="鄭州" select * from mytable whree username="admin" 而下面幾個則不會用到:
select * from mytable whree age=20 and city="鄭州" select * from mytable whree city="鄭州"
MySQL單列索引和多列索引
在設計mysql表索引的時候,可能有個問題,就是多個單列索引好,還是設計為多列索引好 下面從不同角度分析下這個問題 1.多個單列索引 定義 即是在表中在需要索引的字段上為每個字段設計乙個索引 特點 簡單,索引個數多 2.多列索引 定義 即是在表中根據查詢需求在多個欄位上設計乙個索引 特點 稍微複雜,...
mysql單列索引 多列索引的使用
資料庫的索引可以加快查詢速度,原因是索引使用特定的資料結構 b tree 對特定的列額外組織存放,加快儲存引擎 索引是儲存引擎實現 查詢記錄的速度。索引優化是資料庫優化的最重要手段。如果查詢語句使用索引 通常是where條件匹配索引 就會利用樹的結構加快查詢,索引會按值查詢到要查詢的行在表中位置,不...
MySQL使用單列索引和多列索引
討論mysql選擇索引時單列單列索引和多列索引使用,以及多列索引的最左字首原則。1.單列索引 在效能優化過程中,選擇在哪些列上建立索引是最重要的步驟之一。可以考慮使用索引的主要有兩種型別的列 在where子句中出現的列,在join子句中出現的列。請看下面這個查詢 select age 不使用索引 f...