SQL學習筆記(五) -- 索引與SQL優化

一、索引——加快數據庫查詢速度

1)創建索引

1)CREATE INDEX
CREATE INDEX可對錶增加普通索引或UNIQUE索引
Creat [UNIQUE] | [BITMAP] INDEX index_name
On Table_name(column_x[ASC | DESC],column_y,…………)
eg:Creat Index index1 on table1 (column1)
–UNIQUE 唯一索引 BITMAP 位圖索引
–ASC升序(缺省值) DESC降序

2)Alter table
也可以使用Alter table 語句進行索引的創建
ALTER TABLE用來創建普通索引、UNIQUE索引或PRIMARY KEY索引。
ALTER TABLE table_name ADD INDEX index_name (column_list)
ALTER TABLE table_name ADD UNIQUE (column_list)
ALTER TABLE table_name ADD PRIMARY KEY (column_list)

創建規則:

1)應該創建在Where子句,連接條件,Group By,Order By語句中常用的列上
2)表經常被訪問且表的數據量大,訪問的數據大概佔總量的2%~4%
3)Orcale在創建具有主鍵約束和唯一性約束的時候自動生成唯一索引
4)經常進行DML語句的列,不適合創建索引,因爲每次DML操作都需要維護索引
5)對於按範圍查找的列,數據量很大時,最好建立索引,因爲建立索引的時候就已經排序好了
6)在多個列上建立索引(複合索引)是,只有在Where語句中,包含建立索引時第一個列纔會使用索引

2)修改索引

Alter Index index_name0 rename to index_name1; –重命名索引
Alter Index index_name coalesce; –合併索引
Alter Index index_name rebuild; –重建索引
注:合併索引是整理數據庫中的冗餘空間,然後合併。
重建索引是將舊的索引進行刪除,然後生成新的索引。

3)刪除索引

Drop Index index_name

二、SQL優化

1)SQL語句最終執行效果的順序是:From -> Where -> Group By -> Order By

在From中,對錶的解析是從右到左,需要將小表放在右邊,使得生成的基礎表成本更低
在Where中,對條件的解析也是從後往前,需要優先將能過濾更多的數據的條件放在後面

2)在查詢條件(where)語句中,使用索引,並且在語句中儘量避免索引失效 ,索引會失效的情況如下:

–發生了隱式條件轉換 –進行了算術運算(+,-,*,/) –對生成了索引的列使用了函數
–使用<>,not in, not exist, !=, or –在like中’%_’在前 –使用複合索引時,單獨引用了非第一列的索引列
–當字符型數據爲全數字,在where中引用時未添加”單引號 –將空的變量值直接與運算符(符號)進行比較(應採用IS NULL, IS NOT NULL, ISNULL()函數進行操作)

3)用 exists 代替 in

eg:select cloumn_x from table_name a where num in (select cloumn_x from table_name b)
–> select column_x from table_name a where exists(selcet 1 form table_name b where a.column_x = column_x)

4)使用 union 代替 or

eg:select cloumn_x from table_name where clolumn_y = yyy or cloumn_z = zzz
–> select cloumn_x from table_name where cloumn_y = yyy union all (select cloumn_x from table_name where cloumn_z = zzz)

5)任何地方都不能使用 select * from table_name …………操作,用具體的字段代替 “ * ”

6)多使用 commit 語句, 使用 truncate 代替 delete ,使用 where 代替 having , 使用 >= 代替 >

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章