1. 程式人生 > 其它 >MySQL筆記八:索引與檢視

MySQL筆記八:索引與檢視

8.1索引
  • 索引是在資料庫表的欄位上新增的,為了提高查詢效率而存在的機制,可以縮小掃描範圍,索引是資料庫進行優化的重要手段
  • mysql查詢方式:全表掃描、根據索引檢索
  • 在mysql中需要對索引進行排序,索引的排序和TreeSet資料結構相同,TreeSet(TreeMap)底層是一個自平衡的二叉樹,在mysql中索引是一個B-Tree資料結構,遵循左小右大的原則
  • 在mysql中,主鍵上和有unique約束的欄位會自動新增索引物件
  • 在任何資料庫中,任何一張表的任意一條資料記錄在硬碟儲存上都有一個硬碟的物理儲存編號
  • 在mysql中,索引在不同的儲存引擎下以不同的形式存在,MYSIAM中,索引儲存在.MYI檔案中;在MEMORY中,索引儲存在記憶體中;在InnoDB中,索引儲存在tablespace中
  8.2新增索引的條件 (1)資料量龐大 (2)該欄位經常出現在where後面 (3)該欄位很少被修改,很少有DML操作 建議不要隨意新增索引,而是通過主鍵索引   8.3新增和刪除索引 create index emp_ename_index on emp(ename);//新增索引,emp是某張表,ename是被新增索引的欄位 drop index emp_ename_index on emp;//刪除索引   //檢查某個欄位是否使用了索引 explain select * from emp where ename='KING'; //如果結果type=ALL,則認為沒有使用索引;如果type=ref,則認為使用了索引
  8.4索引失效 (1)模糊匹配,使用%開頭 select * from emp where ename like '%T';//模糊匹配的時候,以百分號開頭時索引失效,所以儘量避免%開頭   (2)使用or的時候,or兩端的欄位都要有索引時才能生效,如果有一個沒有索引,則另一個索引也失效 select * from emp where ename=‘KING’or job='MANAGER;   (3)使用複合索引時,沒有使用左側的列查詢,則索引失效 兩個欄位或更多欄位聯合起來新增一個索引,則叫做複合索引 create index emp_job_sal on emp(job,sal);//複合索引
select * from emp where sal>300;//使用右側欄位索引失效,使用job時不會失效   (4)在where列當中索引參加了數學運算,則索引失效 select * from emp where sal+1=800;   (5)在where中索引使用了函式 select * from emp where lower(ename)='smith';   8.5索引的分類 單一索引:一個欄位上新增索引 複合索引:多個欄位桑新增索引 主鍵索引 唯一性索引   8.6檢視view 檢視的特點:對檢視物件進行增刪改查,會導致對應的原表發生改變,使用檢視時可以像使用表一樣進行增刪改查(CRUD),檢視儲存在硬碟上。 檢視的作用:檢視能夠簡化SQL語句,例如一條複雜的SQL語句在很多的位置上反覆使用,為了簡化開發與後期維護,可以建立一個檢視物件,後期修改也只需要修改一處就可以了   建立檢視:create view emp_view as select * from emp;//只有DQL語句才能建立檢視 刪除檢視:drop view emp_view;   insert into emp_view(ename,deptno) values('ALICE',10);//原表emp的資料也發生相應改變   更復雜的寫法 create view emp_dept_view as select e.ename,e.deptno,d.dname from emp e join dept d on e.deptno=d.deptno;   8.7資料的匯入和匯出 mysqldump testdatabase >D:\testdatabase.sql -uroot -p123456;//資料的匯出,無需提前登陸root 將testdatabase匯出到D盤的檔案下   source D:\testdatabase.sql;//資料庫的匯入