mysql索引有幾種型別,mysql有幾種索引型別?使用索引時都有那些地方要注意

2022-02-17 16:43:53 字數 6416 閱讀 9407

1樓:匿名使用者

mysql目前主要有以下幾種索引型別:

1.普通索引

2.唯一索引

3.主鍵索引

4.組合索引

5.全文索引

mysql索引型別

2樓:匿名使用者

普通索引,唯一索引,主鍵索引,聚合索引。

mysql有幾種索引型別?使用索引時都有那些地方要注意

3樓:智者總要千慮

mysql索引型別包括:

一、普通索引

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

1.建立索引

**如下:

create index indexname on mytable(username(length));

如果是char,varchar型別,length可以小於欄位實際長度;如果是blob和text型別,必須指定 length,下同。

2.修改表結構

**如下:

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;

二、唯一索引

它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。它有以下幾種建立方式:

**如下:

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)) );

三、主鍵索引

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

**如下:

create table mytable( id int not null, username varchar(16) not null, primary key(id) );

當然也可以用 alter 命令。記住:一個表只能有一個主鍵。

四、組合索引

為了形象地對比單列索引和組合索引,為表新增多個欄位:

**如下:

create table mytable( id int not null, username varchar(16) not null, city varchar(50) not null, age int not null );

為了進一步榨取mysql的效率,就要考慮建立組合索引。

二:使用索引的注意事項

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

1.索引不會包含有null值的列

只要列中包含有null值都將不會被包含在索引中,複合索引中只要有一列含有null值,那麼這一列對於此複合索引就是無效的。所以我們在資料庫設計時不要讓欄位的預設值為null。

2.使用短索引

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

3.索引列排序

mysql查詢只使用一個索引,因此如果where子句中已經使用了索引的話,那麼order by中的列是不會使用索引的。因此資料庫預設排序可以符合要求的情況下不要使用排序操作;儘量不要包含多個列的排序,如果需要最好給這些列建立複合索引。

4.like語句操作

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

5.不要在列上進行運算

select * from users where year(adddate)<2007;

將在每個行上進行運算,這將導致索引失效而進行全表掃描,因此我們可以改成:

select * from users where adddate<『2007-01-01';

6.不使用not in和<>操作。

三:sql優化原則

常見的簡化規則如下:

1.不要有超過5個以上的表連線(join)

2.考慮使用臨時表或表變數存放中間結果。

3.少用子查詢

4.檢視巢狀不要過深,一般檢視巢狀不要超過2個為宜。

5.連線的表越多,其編譯的時間和連線的開銷也越大,效能越不好控制。

6.最好是把連線拆開成較小的幾個部分逐個順序執行。

7.優先執行那些能夠大量減少結果的連線。

8.拆分的好處不僅僅是減少sql server優化的時間,更使得sql語句能夠以你可以**的方式和順序執行。

如果一定需要連線很多表才能得到資料,那麼很可能意味著設計上的缺陷。

4樓:愛可生雲資料庫

大部分開發會了解這樣的《開發規範》:建立索引要選擇區分度高的欄位。他們會認為區分度低的欄位不適合建立索引或者不適合新增到組合索引裡面。

但是這樣的操作會導致很多慢查。舉例來說:

select  * from  tab where a=1 and b=2;

場景 1

符合 a=1的記錄數有 10w 條記錄 ,b=2 有 1000 條記錄。如果只是建立idx_a(a),sql 請求通過索引idx_a訪問 10w 條件記錄,然後還要逐一匹配 10w 條記錄中的 status,找到符合 b=2的記錄。這個動作會導致慢查。

如果建立組合索引idx_ab(a,b),sql 請求通過索引idx_ab可以直接定位到 1000 條記錄,無需額外的過濾。這樣減少訪問 9900 條記錄的時間,提升查詢速度。

場景 2

符合 a=1的有 100 條記錄,status=2 有 10 條記錄。其實場景 2 因為資料量比較少,直接訪問 100 條記錄和定位到 10 條記錄的時間消耗相差不大,量變不足以引發質變,可以忽略了。

tips:

建立索引的目的是通過索引儘可能找到匹配 where 條件的行,減少不必要的回表,提高查詢效率;

需要辯證地看待區分度比較低的欄位在組合索引中的作用。在組合索引的情況下,我們不能只是單純地看欄位的區分度,而是要看符合條件的記錄數是多少。符合條件的記錄越少,效能越好。

mysql 有幾種索引

5樓:但丁舟上

在mysql的效能優化中,索引是非常重要的一塊,好的索引邏輯可以大大提高mysql的效率。實際上,索引也是一張表,該表儲存了主鍵與索引欄位,並指向實體表的記錄。

本回答來自:mysql 索引_樹懶學堂_一站式資料知識平臺

索引分單列索引和組合索引。單列索引,即一個索引只包含單個列,一個表可以有多個單列索引,但這不是組合索引。組合索引,即一個索引包含多個列。

普通索引:這是最基本的索引,它沒有任何限制。

唯一索引:它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。

mysql索引有幾種

mysql資料庫索引型別都有哪些

mysql有幾種索引型別?使用索引時都有那些地方要注意?sql優化原則

6樓:趣事情

mysql索引型別包括:

一、普通索引

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

1.建立索引

**如下:

create index indexname on mytable(username(length));

如果是char,varchar型別,length可以小於欄位實際長度;如果是blob和text型別,必須指定 length,下同。

2.修改表結構

**如下:

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;

二、唯一索引

它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。它有以下幾種建立方式:

**如下:

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)) );

三、主鍵索引

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

**如下:

create table mytable( id int not null, username varchar(16) not null, primary key(id) );

當然也可以用 alter 命令。記住:一個表只能有一個主鍵。

四、組合索引

為了形象地對比單列索引和組合索引,為表新增多個欄位:

**如下:

create table mytable( id int not null, username varchar(16) not null, city varchar(50) not null, age int not null );

為了進一步榨取mysql的效率,就要考慮建立組合索引。

二:使用索引的注意事項

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

1.索引不會包含有null值的列

只要列中包含有null值都將不會被包含在索引中,複合索引中只要有一列含有null值,那麼這一列對於此複合索引就是無效的。所以我們在資料庫設計時不要讓欄位的預設值為null。

2.使用短索引

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

3.索引列排序

mysql查詢只使用一個索引,因此如果where子句中已經使用了索引的話,那麼order by中的列是不會使用索引的。因此資料庫預設排序可以符合要求的情況下不要使用排序操作;儘量不要包含多個列的排序,如果需要最好給這些列建立複合索引。

4.like語句操作

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

5.不要在列上進行運算

select * from users where year(adddate)<2007;

將在每個行上進行運算,這將導致索引失效而進行全表掃描,因此我們可以改成:

select * from users where adddate<『2007-01-01';

6.不使用not in和<>操作。

三:sql優化原則

常見的簡化規則如下:

1.不要有超過5個以上的表連線(join)

2.考慮使用臨時表或表變數存放中間結果。

3.少用子查詢

4.檢視巢狀不要過深,一般檢視巢狀不要超過2個為宜。

5.連線的表越多,其編譯的時間和連線的開銷也越大,效能越不好控制。

6.最好是把連線拆開成較小的幾個部分逐個順序執行。

7.優先執行那些能夠大量減少結果的連線。

8.拆分的好處不僅僅是減少sql server優化的時間,更使得sql語句能夠以你可以**的方式和順序執行。

如果一定需要連線很多表才能得到資料,那麼很可能意味著設計上的缺陷。

鯽魚有幾種型別

鯽魚品種較多來,有十五種,源常見的有 1 滇池高bai背鯽 滇池高背鯽魚du 是上世紀70年代中期在雲zhi南滇池及其水系發dao展起來的一個優勢種群,具有個體大 生長快 繁殖力強等特點,因背脊高聳而得名。個體最大3千克,親水性強,不宜在內地飼養。2 方正銀鯽 方正銀鯽原產於黑龍江省方正縣雙風水庫,...

電機有幾種型別

電機分類 1.按工作電源種類劃分 可分為直流電機和交流電機。1 直流電動機按結構及工作原理可劃分 無刷直流電動機和有刷直流電動機。有刷直流電動機可劃分 永磁直流電動機和電磁直流電動機。電磁直流電動機劃分 串勵直流電動機 並勵直流電動機 他勵直流電動機和復勵直流電動機。永磁直流電動機劃分 稀土永磁直流...

泰迪熊有幾種,泰迪熊有幾種型別?

毛色貌似是棕灰黑 白的不知道有沒有應該也有吧 泰迪熊有幾種型別?史泰福泰迪紀念熊的 可上溯到1904年,在美國聖路易斯州舉辦的世界玩具博覽會上,史泰福的louis小熊獲得設計第一名的殊榮!一般來說紀念熊大致可分為以下幾類 1 會員熊 會員熊為必須加入史泰福年繳會員制才能購買的泰迪熊。2 地區發行熊 ...