一:索引
索引是建立在資料庫表上,其作用是提高對錶中資料的查詢速度。
假設資料庫中有一張1000條記錄的**,如果沒有建立索引的話,使用者想通過查詢條件查詢,實際上是把整個資料庫中1000條記錄都讀取一遍,滿足查詢條件的就加入結果集中,這樣效率很低,如果表中建立了針對查詢條件欄位的索引,查詢的時候會立即找到滿足條件的記錄加入結果集,不需要遍歷過程,這樣大大提高了資料庫查詢效率。
建立索引雖然提高了資料庫**的查詢效率,但是也增加了資料庫維護速度,因為索引需要占用物理空間,其次每次使用者插入,更改,刪除記錄的時候都要同步操作索引,這樣就造成資料維護速度降低,所以使用索引需要綜合考慮索引的優點和缺點。
使用索引的幾個建議
1.對經常作為查詢條件的字段使用索引
2.如果需要用到索引盡量在整型字段上面使用索引
3.盡量使用唯一性的字段來建立索引
4.限制索引的數目,因為索引是占用物理空間的,並且資料更新需要同步操作索引,所以在索引的數量上面需要綜合考慮
5.刪除不再使用或者很少使用的索引
6.使用者也可以在插入,更改,刪除記錄的時候先刪除掉索引,在運算元據庫,然後增加索引來使用
建立索引有幾種方法:
1.建立**的時候建立索引
建立普通索引
index(欄位名);
任意欄位都可以
建立唯一索引
unique index 索引名稱(欄位名);
唯一性字段可以,比如主鍵就是唯一字段或者約束屬性是unique的字段
建立全文索引
fulltext index 索引名稱(欄位名);
char、varchar、text型別字段上面可以
建立單列索引
index 索引名稱(欄位名(限制長度));
對於字元型資料不同判斷全部字元,只需要判斷前面限制長度的字元就型了,目的還是提高查詢速度
建立多列索引
index 索引名稱(欄位名1, 欄位名2...);
只有查詢條件中使用了第乙個欄位名才會生效
比如建立多列索引:index index_table(username, password, time);
這裡建立了三個欄位的索引,實際上mysql建立了三個索引分別是username,password。username,time。username,password,time。這樣就能很清楚看到如果查詢條件中使用where password="" and time=""這種的話,是不會用到這個索引的,查詢條件中沒有索引第乙個欄位username。
建立空間索引
這個很少用到,這裡就暫時不說。。
2.在已有的**中建立索引
create [unique/fulltext/spatial] index 索引名 on 表名 (欄位名(限制長度));
3.用alter table語句來建立索引
alter table 表名 add [unique/fulltext/spatial] index 索引名 (欄位名(限制長度));
刪除索引:
drop index 索引名 on 表名;
二:觸發器
觸發器,顧名思義就是通過某個特定的事件來觸發另外乙個事件,我們把」通過某個特定的事件「稱為觸發條件,這個條件有insert,update,delete,最終觸發另外乙個事件就是我們具體要資料庫操作的步驟了,試下下如果有兩張表,表a中記錄學生和對應年齡的資料,表b中記錄學生和體重的資料,現在有個學生退學了,那麼我們要把表a中這個學生的記錄刪除掉,表b中這個學生的記錄也要同時刪除,這樣就起到乙個資料同步的作用,這裡用觸發器的話,就是當表a中該學生記錄被delete掉,觸發事件來delete掉表b中該學生的記錄,所以觸發器在實際運用中還是有存在的意義的。
注意:觸發條件和觸發事件不能作用於同一張表中!
建立乙個一條執行語句的觸發器:
create trigger 觸發器名 [before/after] [insert/update/delete] on 表名 for each row 執行語句;
建立乙個多條執行語句的觸發器:
create trigger 觸發器名 [before/after] [insert/update/delete] on 表名 for each row begin 執行語句列表 end;
[before/after]: 說明是在觸發之前就執行語句還是觸發之後執行。
[insert/update/delete]: 說明觸發條件是insert或update或delete。
執行語句列表: 以」;「號分開的執行語句,但是mysql預設是以」;「號來做結束的,所以可以用」delimiter &&「把資料庫結束符換成&&,等觸發器建立完後在改回」;「。
檢視觸發器:
show triggers;
刪除觸發器:
drop trigger 觸發器名;
mysql資料庫索引學習
最近做的乙個專案用的是mysql資料,編寫sql 的時候,因為業務複雜,經常有很多表聯合查詢的sql需要編寫,於是我就思考著,如果資料量將來打起來後,這麼複雜的sql執行起來會不會慢,後人接手我的專案後,會不會因為效能原因罵我?帶著問題,開始學習mysql索引相關的內容起來。學了一段,寫篇文章記錄一...
資料庫mysql索引 資料庫 mysql索引
mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...
mysql資料庫 表 索引 觸發器
ctrl c退出sql程式 1 資料庫 檢視資料庫 show databases 建立資料庫 create database tb name 刪除資料庫 drop database db name mysql drop database affair query ok,2 rows affected...