1. 程式人生 > >MySQL自定義函式、檢視、索引

MySQL自定義函式、檢視、索引

MySQL檢視

建立檢視:(虛擬表)
create or replace view 名稱 as 
select ...(查詢語句)


MySQL自定義函式
只有一個返回值,不能返回結果集,可以在SQL語句中呼叫自定義函式function
delimiter // 
drop function if exists getname;
create function getname(studentid int)
-- 定義返回型別
returns varchar(20)
begin 
-- 宣告變數
    declare studentname varchar(20);
    select sname into studentname from student where sid=studentid;
-- 設定返回值
    return studentname;
end;//

delimiter ;
-- 呼叫自定義函式,並對列命名
select getname(1) as name;

索引


優點:
1、所有的MySql列型別(欄位型別)都可以被索引,也就是可以給任意欄位設定索引
2、大大加快資料的查詢速度

缺點:
1、建立索引和維護索引要耗費時間,並且隨著資料量的增加所耗費的時間也會增加
2、索引也需要佔空間,我們知道資料表中的資料也會有最大上線設定的,如果我們有大量的索引,索引檔案可能會比資料檔案更快達到上線值
3、當對錶中的資料進行增加、刪除、修改時,索引也需要動態的維護,降低了資料的維護速度。

使用原則:
通過上面說的優點和缺點,我們應該可以知道,並不是每個欄位度設定索引就好,也不是索引越多越好,而是需要自己合理的使用。
1、對經常更新的表就避免對其進行過多的索引,對經常用於查詢的欄位應該建立索引,
2、資料量小的表最好不要使用索引,因為由於資料較少,可能查詢全部資料花費的時間比遍歷索引的時間還要短,索引就可能不會產生優化效果。
3、在一同值少的列上(欄位上)不要建立索引,比如在學生表的"性別"欄位上只有男,女兩個不同值。相反的,在一個欄位上不同值較多可是建立索引

Mysql索引主要有兩種結構:B+Tree索引和Hash索引
Hash
MySQL中,只有Memory(Memory表只存在記憶體中,斷電會消失,適用於臨時表)儲存引擎顯示支援Hash索引,是Memory表的預設索引型別
hsah索引把資料的索引以hash形式組織起來,因此當查詢某一條記錄的時候,速度非常快。當時因為是hash結構,每個鍵只對應一個值,而且是雜湊的方式分佈。所以它並不支援範圍查詢和排序等功能
B+Tree
B+tree是mysql使用最頻繁的一個索引資料結構,是Inodb和Myisam儲存引擎模式的索引型別
相對Hash索引,B+樹在查詢單條記錄的速度比不上Hash索引,但是因為更適合排序等操作,所以他更受使用者的歡迎。畢竟不可能只對資料庫進行單條記錄的操作。

Mysql常見索引有:主鍵索引、唯一索引、普通索引、全文索引、組合索引
1.普通索引index :加速查詢
2.唯一索引
    主鍵索引:primary key :加速查詢+約束(不為空且唯一)
    唯一索引:unique:加速查詢+約束 (唯一)
3.聯合索引
    -primary key(id,name):聯合主鍵索引
    -unique(id,name):聯合唯一索引
    -index(id,name):聯合普通索引
4.全文索引fulltext :用於搜尋很長一篇文章的時候,效果最好。
5.空間索引spatial