mysql 建立索引 終止 建立索引及撤銷

2021-10-18 13:03:22 字數 3486 閱讀 2266

例如:select * from studentinfo with (name_index))

執行結果如下:

(說明:對於查詢表中的所有記錄資訊,使用索引是毫無意義的。)

使用order by關鍵字同樣可以對查詢結果進行排序。

select * from studentinfo order by sname

執行結果如下:

二者的區別:

建立索引後,資料庫系統實際上建立了乙個索引結構休,使用者每次使用查詢資料時,都使用相同的索引結構,從而節約了時間。

當資料庫表被刪除時,和它相關的所有索引都將被刪除。

(2) 建立多字段非簇索引

例如:建立***和sname的索引

create index ***name on studentinfo(***,sname)

select * from studentinfo with (***name))

執行結果如下:

由上可見,建立多字段簇索引中,***字段優先順序高於sname欄位。在建立多欄位索引時,各字段的排列順序決定了其優先順序,排列在前,優先順序越高。

(3) 使用unique關鍵字建立惟一索引

惟一索引是指不允許在兩行中存在相同的索引值。當使用者試圖用insert和update語句,在擁有惟一索引的資料中生成乙個重複的值,會提示錯誤。當在有重複的資料上建立惟一索引時,也提示錯誤。如下:

由於sno裡有相同的002,我們先把dno為3的記錄的sno修改為003。

update studentinfo set sno =003 where dno=003

然後建立sno惟一索引

create unique index sno_index on studentinfo(sno)

後,執行

insert into studentinfo values('001','劉梅','女','湖南',2)

會提示如下錯誤:

msg 2601, level 14, state 3, line 1

不能在具有唯一索引 'sno_index' 的物件 'studentinfo' 中插入重複鍵的行。

語句已終止。

(0 row(s) affected)

建立如下索引:

create unique index address_index on studentinfo(address)

會提示如下錯誤:

msg 1505, level 16, state 1, line 1

create unique index 終止,因為發現了索引 id 7 的重複鍵。最重要的主鍵為 '北京    男'。

語句已終止。

(4) 使用clustered關鍵字建立簇索引

建立簇索引會改變資料存放的物理位置。在帶有簇索引的表中,行是以索引順序存放的。即簇索引不僅對索引中的鍵字值進行排序,而且對錶中的行排序,以便使其與索引的排序匹配。

使用簇索引的優點:

1、使用簇索引的表將占用最小的磁碟空間。因為dbms在插入新行時,會自動地重用以前分配給刪除行的空間。

2、對基於簇索引的列進行查詢時,會有更快的執行速度,因為所有值在物理磁碟上相互靠近。

3、基於簇索引的列以公升序顯示資料查詢,不再需要order by子句,因為表的資料本身已經以所要求的輸出順序排列。

例如:create clustered index snamecluster_index on studentinfo(sname)

執行 select * from studentinfo 語句

執行結果如下:

可見,建立簇索引後,表中資料(行)儲存的物理位置發生了變化。

(5) 建立多個欄位的簇索引。

create clustered index ***addresscluster_index on studentinfo(***,address)

如果沒有執行刪除簇索引,則用出現如下錯誤:

msg 1902, level 16, state 3, line 1

cannot create more than one clustered index on table 'studentinfo'. drop the existing clustered index 'snamecluster_index' before creating another.

出現此錯誤的原因是因為乙個表只能建立乙個簇索引。

因此我們需要刪除以前建立的簇索引。

drop index studentinfo.snamecluster_index 然後再執行

create clustered index ***addresscluster_index on studentinfo(***,address)

執行 select * from studentinfo 語句

執行結果如下:

由此可見,在建立多字段簇索引時,優先級別同樣取決於欄位的排列順序。

(6) 索引的銷毀:語法如下:

例如:drop index studentinfo.snamecluster_index

(7)使用索引的幾點原則:

1、對小的資料表,使用索引並不能提高任何檢索效能,因此不需對其建立索引。

2、當使用者要檢索的字段的資料報含有很多數值或很多空值(null)時,為該字段建立索引,會大大提高檢索效率。

3、當使用者查詢表中的資料時,如果查詢結果包含的資料(行)較少,一般少於資料總數的25%時,使用索引會顯著提高查詢效率。反之,如果使用者的查詢操作,返回結果總是包含大量資料,那麼索引的用處不大。

4、索引列在where子句中應頻繁使用。例如,在學生姓名欄位上建了索引,但實際查詢中並不是經常用姓名作為查詢條件,該索引就沒有發生作用。

5、先裝資料,後建索引。對於大多數的表,總有一批初始資料需要裝入。該原則是說,建立表後,先將這些初始資料裝入表,然後再建索引,這樣可以加快初始資料的錄入。如果建表後就建索引,那麼在輸入初始資料時,每插入乙個記錄都要維護一次索引。當然,對於索引來說,早建和晚建都是允許的。

6、索引提交了資料檢索的速度,但也降低了資料更新的速度。如果要對錶中的資料進行大量更新時,最好先銷毀索引,等資料更新完畢再建立索引,這樣會提高效率。

7、索引要占用資料庫空間。在設計資料庫時,要把需要的索引空間考慮在內。

8、盡量把錶和它的索引存放在不同的磁碟上,這樣會提高查詢速度。

怎麼會

c mysql建立索引 MySQL 建立索引

1 索引建立原則 1 搜尋的索引列,不一定是所要選擇的列。換句話說,最適合索引的列是出現在where子句中的列,或連線子句中指定的列,而不是出現在select關鍵字後的選擇列表中的列。2 使用唯一索引。考慮某列中值的分布。索引的列的基數越大,索引的效果越好。3 使用短索引。如果對字串列進行索引,應該...

(索引)建立MySQL索引

建立索引的必要性 主鍵預設是建立索引的,而且具有唯一性 合適地建立索引後比不建立索引,提高了查詢速度 建立索引的語法 簡單索引 可以有重複資料 create index indexname on tablename column name 1舉例子說明如 建立乙個資料表,設定一些初始的資料,然後採用...

mysql建立索引

選擇索引列 在效能優化過程中,選擇在哪些列上建立索引是最重要的步驟之一。可以考慮使用索引的主要有兩種型別的列 在where子句中出現的列,在join子句中出現的列。請看下面這個查詢 select age 不使用索引 from people where firstname mike 考慮使用索引 an...