oracle 採用兩種訪問表中記錄的方式:
語法:create [unique] index index_name on table_name(column_list) [tablespace tablespace_name];
(1)唯一索引;設定某列為主鍵時會在該列新增乙個唯一索引,根據該主鍵查詢時不會再遍歷整張表,唯一索引適合建立在值唯一的列
alter table teacher add constraint pk_tno primary key on (tno);
(2) btree索引(普通索引),適合建立在重複值比較少的列上
create index i_tname on teacher(tname);
(3) 位圖索引,適合建立在重複值較多的列上
create bitmap index i_tjob on teacher(tjob);
(4) 反向鍵索引,適合建立在類似序列增長的列上,可防止某個資料塊訪問過熱(比如批量插入)
create index i_tseq on teacher(tseq) reverse
(5)函式索引
create index i_tname2 on teacher(upper(tname))
(6) 組合索引(可以分開建立)
create bitmap index i_g_j on teacher(tgender,tjob)
建立索引的原則:
頻繁搜尋的列
經常排序、分組的列
經常連線的列
指定單獨的表空間
資料量小、增刪改資料特別頻繁、增刪改效能要求高於查詢的表不適合建立索引
把表中資料分成若干部分,並儲存在不同的位置(適合在千萬級以上資料的表建立分割槽)
為什麼要做表分割槽?
改善查詢效能
使表更容易管理
便於備份和恢復
提高資料安全性
分割槽型別:
範圍分割槽:將資料基於範圍對映到不同分割槽,常用於時間
partition p1 values less than (to_date(『2018-09-01』,『yyyy-mm-dd』))
列表分割槽:某列的值只有幾個,採用列表分割槽
partition p2 values(『深圳』)
雜湊分割槽:不指定分割槽條件,資料庫自動將資料平均分配(根據列的hash值)
復合分割槽:做了乙個分割槽後,每個分割槽裡面再次做分割槽
給帶分割槽的表建立索引,需要在建立語句後面加local關鍵字
create bitmap index i_sale_date on sale(sale_date) local;
delete
from emp e
where e.rowid >
(select
min(x.rowid)
from emp x where x.emp_no = e.emp_no)
;
12 優化資料庫 優化SQL語句 索引
第 一 優化索引 sql語句 分析慢查詢 第二 設計表的時候嚴格按照資料庫的設計正規化來設計資料庫 第三 我們可以加上redis快取,將經常被訪問到的資料,但是不需要經常變化的資料放入至redis快取伺服器裡面 第四 還可優化硬體,在硬體層面,我們可以使用更好的一些硬碟 固態硬碟 使用一些磁碟陣列技...
資料庫(4)索引優化和SQL語句優化
這一段時間一直在學習關係型資料庫,準備寫乙個小專題來總結一下這一段時間的學習結果。話說資料庫優化一直是sql型資料庫的熱門問題,包括從網路i o方面,從硬碟i o方面,從cpu計算方面等等很多手段,都可以對資料庫進行優化。這篇文章主要總結了如何建立合適的索引提公升查詢速度,如何通過優化sql提公升語...
資料庫索引 索引優化
二 三星索引 三 合適設計理想索引 謂詞簡單謂詞和複雜謂詞 where字句中的每個條件稱為乙個謂詞。過濾因子 描述了謂詞的選擇性,即表中滿足謂詞條件的記錄行數所佔的比例 過濾因子 ff 結果集的數量 錶行的數量 平均過濾因子 1 不同列值的數量 索引片及匹配列 乙個索引定義乙個索引片,如果where...