Mysql索引概念和儲存過程
阿新 • • 發佈:2019-01-10
索引
索引演算法
1.二叉樹索引,時間複雜度O(lgN)。 2.雜湊表,時間複雜度O(1)。索引原則:
1.不過度索引 2.索引條件列(where後面最頻繁的條件比較適宜索引) 3.索引雜湊值,過於集中的值不要索引。例如:給“男”“女”索引,意義不大。
索引缺點:
降低了增刪改的速度(update/delete/insert)
增大了表的檔案大小(索引檔案甚至可能比資料檔案還要大)
索引分類:
普通索引(index):僅僅是加快查詢速度 唯一索引(unique index):行上的值不能重複 主鍵索引(primary key):主鍵不能重複,主鍵索引必唯一,但是唯一索引不一定是主鍵 全文索引(fulltext index)檢視索引
show index from 表名; show index from member \G注意沒有分號,有分號會報錯。\G代表橫著顯示
建立索引
alter table 表名 add index /unique/fulltext等 (索引名);
索引名可以不加
alter table 表名 add primary key(列名); //不要加索引名,因為主鍵只有一個刪除索引
alter table 表名 drop index 索引名; //刪除普通索引 alter table 表名 drop primary key; //刪除主鍵索引儲存過程
儲存過程 概念類似於函式,就是把一段程式碼封裝起來 當要執行這一段程式碼的時候,可以通過呼叫該儲存過程來實現。 在封裝的語句體裡面可以用if/else,case,while等控制結構 由於mysql 列本來就可以當變數看,所以有控制結構有列就可以當作程式設計了... 檢視現有儲存過程:show procedure status; 建立儲存過程:見下面 刪除儲存過程:drop procedure 儲存過程名 呼叫儲存過程2.帶引數 create procedure p2(n int) begin select * from g where num > n end$ 呼叫方法:call p2(10)$ 3.加上控制結構if create procedure p2(n int, j char(1)) begin if j == 'h' then select * from g where num > n; else select * from g where num < n; endif //注意sql裡面if/else後面有endif end$ 4.計算1->n的和,while
所以,儲存過程實際上可以理解為函式,只是沒有返回值!