檢視(VIEW)、索引(INDEX)
1、檢視:表的一部分投影,也是資料庫中一個物件。(表的虛擬部分)
作用:因為檢視中含有某表中的部分資料,不在檢視中的欄位有隱藏效果。相對來說,較安全。
特點:檢視可以像表一樣進行增刪改查。
建立檢視:create view viewName as subQuery;
eg:將員工表中的10部門的資料封裝到一個檢視view_emp中
create view view_emp as select * from emp where deptno = 10;
刪除檢視:drop view viewName;
操作檢視:通過檢視進行DML操作,一定會對錶有影響。 但通過表進行DML操作,可能會對檢視有影響。
eg:通過檢視, 插入資料 empno:9001,ename:'zs',部門號:10 插入資料 empno:9002,ename:'ls',部門號:20 insert into view_emp_deptno_10 values (9003,'zs',null,null,null,null,null,10); insert into view_emp_deptno_10 (empno,ename,deptno)values (9004,'ls',20); eg: 查詢表emp,查詢檢視view_emp_deptno_10 select * from view_emp_deptno_10; 得出結論:如果操作了表中的記錄,並且此記錄存在檢視中,則檢視中會有影響,如果不存在檢視中則沒有影響。
with check option:對檢視的一種檢查約束選項。
如果在建立檢視有此選項時,表示只能對檢視DML操作可見資料。對檢視不可見的資料,是不可以通過檢視進行DML操作的。
檢視的分類:
簡單檢視:subQuery是一個表中的普通查詢語句。
複雜檢視:subQuery是一個可以帶有分組函式的,或者關聯查詢的語句。複雜檢視不能對檢視進行DML操作,只能進行DQL操作
練習:建立一個複雜檢視view_emp_100,是每個部門的平均工資,最高工資,最低工資,及其部門號。 create view view_emp_100 as select avg(ifnull(sal,0)) avg_sal,max(sal) max_sal, min(sal) min_sal,deptno from emp group by deptno;
2、索引:目的是為了提高查詢速度。相當於一本書的目錄。
特點:索引也是資料庫的物件,佔空間,每張表每個欄位都可以設定相應索引。
優點:提高查詢速度。
缺點:佔空間,每次進行DML操作時,資料庫都要自動重新維護索引,降低效率。雖然索引可以提高效率,但並不是索引越多越好。
不需要索引的情況:
*表中資料量比較小時,無需索引(因為直接查詢可以比索引更快)
*當某個欄位值較少時,也不需要,如性別欄位只有'f','m'
索引的建立:
練習1:給emp表中的empno建立索引。
create index index_emp_empno on emp(empno);
練習2:查詢empno為9003的資料。
select * from emp where empno=9003;
索引的刪除:drop index indexName;