1. 程式人生 > >資料庫:檢視和索引

資料庫:檢視和索引

目錄

一、檢視

1.什麼是檢視?

2.為什麼使用檢視?

3.如何使用檢視?

二、索引

1.什麼是索引?

2.為什麼使用索引?

2.如何使用索引?(建立、刪除)

3.適用場景有哪些?

4.注意事項有哪些?


一、檢視

1.什麼是檢視?

檢視是一張虛擬表,並不在資料庫中以儲存資料值集的形式存在。在引用過程中依據基表動態生成。

2.為什麼使用檢視?

安全:有的資料是需要保密的,如果直接把表給出來進行操作會造成洩密,那麼可以通過建立檢視把相應檢視的許可權給出來即可保證資料的安全。

高效:複雜的連線查詢,每次執行時效率比較低,可以考慮新建檢視,每次從檢視中獲取,將會提高效率。

定製資料:將常用的欄位放置在檢視中。

3.如何使用檢視?

3.1 建立檢視

#檢視10號部門所有的員工資訊
create view v_emp as select * from emp where deptno=10;

3.2 查詢檢視

select * from v_emp;

3.3 修改檢視

#將基表的ename欄位修改了
update v_emp set ename='kitty' where empno=7839;
#將檢視包含的deptno均修改為20,在基表中修改
update v_emp set deptno=20;
#結果集為空,基表中不存在10號部門了
select * from v_emp;
# with check option保證檢視查詢條件不被修改,但其他欄位可以修改
create view v_emp as select * from emp where deptno=10 with check option;

3.4 刪除檢視

#刪除檢視(DDL操作)
drop view v_emp;

3.5 注意事項

  • 通過檢視可以修改基表資料,但檢視一般只做查詢。
  • with check option關鍵詞詞用於保證檢視的查詢條件不被修改,但其他欄位可以修改。

二、索引

1.什麼是索引?

索引是供伺服器快速在表中查詢一行資料的資料結構,可以比作書籍的目錄。mysql中的索引的預設資料結構是B-Tree。

2.為什麼使用索引?

2.1 效能指標

效能從高到低依次是:

system>const>eq_ref>ref>fulltext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>ALL,其中all表示全表掃描。一般來說,查詢至少達到range級別,最好能達到ref級別。否則,sql的查詢效能會很慢。

2.2 查詢語句效能比較

關鍵詞explain:檢視sql執行效能

#解釋計劃任務
#explain:檢視sql執行效能
#效能級別:const,查詢1row
explain select * from emp where empno=7788;
#效能級別:all(全表掃描),查詢14row
explain select * from emp where ename='scott';

程式碼說明:為什麼第1條查詢比第2條查詢快這麼多?第1條語句的條件欄位是主鍵,主鍵自動建立索引,根據記錄地址查詢;而第2條語句的條件是普通欄位,做的是全表掃描。

2.如何使用索引?(建立、刪除)

2.1 普通索引

create index index_name on tname(fie1...);
#建立普通單列索引,多個列用逗號隔開
create index index_name on emp(ename);
#效能級別:ref,查詢1row
explain select * from emp where ename='scott';
#刪除索引
drop index index_name on emp;

2.2 唯一索引

與普通索引區別是指定列的資料必須是唯一的,主鍵、唯一約束、外來鍵等都會自動新增索引。

#建立唯一索引,唯一約束也會新增唯一索引
create unique index index_name on tname(fie);

3.適用場景有哪些?

表資料量足夠大;

增刪改較少的表;

高基數列。什麼意思?該列的資料大多數都不一樣。

4.注意事項有哪些?

索引需要單獨開闢空間進行維護,對資料進行增刪改,都需要維護索引。所以索引不易新增過多;

將條件列設定索引(經常作為條件的列);

索引失效的狀況:比如or關鍵字會導致索引失效。