1.建立索引
-- 1.新增primary key(主鍵索引)
alter
table
`table_name`
addprimary
key(
`column`)
;-- 2.新增unique(唯一索引)
alter
table
`table_name`
addunique(`
column`)
;-- 3.新增index(普通索引)
alter
table
`table_name`
addindex index_name (
`column`)
;-- 4.新增fulltext(全文索引)
alter
table
`table_name`
add fulltext (
`column`)
;-- 5.新增多列索引
alter
table
`table_name`
addindex index_name (
`column1`
,`column2`
,`column3`
);
其中table_name是要增加索引的表名,column指出對哪些列進行索引,多列時各列之間用逗號分隔。索引名index_name可選(相當於別名)
2.刪除索引
drop
index index_name on talbe_name #刪除talbe_name表的index_name索引
alter
table table_name drop
index index_name #同第乙個一樣的效果
alter
table table_name drop
primary
key
第3條語句只在刪除primary key索引時使用,因為乙個表只可能有乙個primary key索引,因此不需要指定索引名。如果沒有建立primary key索引,但表具有乙個或多個unique索引,則mysql將刪除第乙個unique索引。
如果從表中刪除了某列,則索引會受到影響。對於多列組合的索引,如果刪除其中的某列,則該列也會從索引中刪除。如果刪除組成索引的所有列,則整個索引將被刪除。
3.檢視索引
tablel:表的名稱。
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:注釋
mysql在建立索引優化時需要注意的問題
設計好mysql的索引可以讓你的資料庫飛起來,大大的提高資料庫效率。設計mysql索引的時候有一下幾點注意:
1,建立索引
對於查詢佔主要的應用來說,索引顯得尤為重要。很多時候效能問題很簡單的就是因為我們忘了新增索引而造成的,或者說沒有新增更為有效的索引導致。如果不加
索引的話,那麼查詢任何哪怕只是一條特定的資料都會進行一次全表掃瞄,如果一張表的資料量很大而符合條件的結果又很少,那麼不加索引會引起致命的效能下
降。但是也不是什麼情況都非得建索引不可,比如性別可能就只有兩個值,建索引不僅沒什麼優勢,還會影響到更新速度,這被稱為過度索引。
2,復合索引
比如有一條語句是這樣的:select * from users where area=』beijing』 and age=22;
如果我們是在area和age上分別建立單個索引的話,由於mysql查詢每次只能使用乙個索引,所以雖然這樣已經相對不做索引時全表掃瞄提高了很多效
率,但是如果在area、age兩列上建立復合索引的話將帶來更高的效率。如果我們建立了(area, age,
salary)的復合索引,那麼其實相當於建立了(area,age,salary)、(area,age)、(area)三個索引,這被稱為最佳左字首
特性。因此我們在建立復合索引時應該將最常用作限制條件的列放在最左邊,依次遞減。
3,索引不會包含有null值的列
只要列中包含有null值都將不會被包含在索引中,復合索引中只要有一列含有null值,那麼這一列對於此復合索引就是無效的。所以我們在資料庫設計時不要讓字段的預設值為null。
4,使用短索引
對串列進行索引,如果可能應該指定乙個字首長度。例如,如果有乙個char(255)的 列,如果在前10 個或20 個字元內,多數值是惟一的,那麼就不要對整個列進行索引。短索引不僅可以提高查詢速度而且可以節省磁碟空間和i/o操作。
5,排序的索引問題
mysql查詢只使用乙個索引,因此如果where子句中已經使用了索引的話,那麼order by中的列是不會使用索引的。因此資料庫預設排序可以符合要求的情況下不要使用排序操作;盡量不要包含多個列的排序,如果需要最好給這些列建立復合索引。
6,like語句操作
一般情況下不鼓勵使用like操作,如果非使用不可,如何使用也是乙個問題。like 「%aaa%」 不會使用索引而like 「aaa%」可以使用索引。
7,不要在列上進行運算
select * from users where
year(adddate)
8,不使用not in和操作
not in和操作都不會使用索引將進行全表掃瞄。not in可以not exists代替,id3則可使用id>3 or id
mysql 建立索引和刪除索引
索引的建立可以在create table語句中進行,也可以單獨用create index或alter table來給表增加索引。刪除索引可以利用alter table或drop index語句來實現。1 使用alter table語句建立索引。語法如下 alter table table name ...
mysql 建立索引和刪除索引
索引的建立可以在create table語句中進行,也可以單獨用create index或alter table來給表增加索引。刪除索引可以利用alter table或drop index語句來實現。1 使用alter table語句建立索引。語法如下 alter table table name ...
mysql 建立索引和刪除索引
索引的建立可以在create table語句中進行,也可以單獨用create index或alter table來給表增加索引。刪除索引可以利用alter table或drop index語句來實現。1 使用alter table語句建立索引。語法如下 alter table table name ...