1. 程式人生 > 其它 >優化演算法——人工蜂群演算法(ABC)

優化演算法——人工蜂群演算法(ABC)

--索引的定義,使用場景,常見的用法

索引是 對錶中的資料進行排序之後,把資料以及所在的位置的行rowid都記錄下來,記錄到一個表當中(索引表)。當我們對資料進行查詢的時候,首先 會差索引表,從索引表中查到rowid,直接訪問rowid對應的行。

---在index表新建索引---
---索引格式

create index 索引名稱 on 表名(欄位1,欄位2...);

--建索引例子

create index index_behavior on sample_index(behavior);

---怎麼看一個表裡面有哪些索引了? DDL

select * from user_indexes;   --
-記錄了 表明對應的所有索引名稱

--檢視索引名稱

select * from user_indexes where lower(table_name)='emp_test';

--檢視索引列

select * from user_ind_columns where lower(table_name)='emp_test';

---執行計劃的欄位解釋
描述description : 計算的步驟
物件所有者: ODS,DWS,分層的使用者
物件名稱: 表名,索引名稱
COST: 查詢的消耗,COST越小越好,同樣一個查詢,如果索引的COST小,就查索引,否則從資料表中查詢,不用索引
基數:查詢的結果的數量
大小:查詢的結果的資料量的大小(佔空間)

---什麼時候是用索引的效果最好?
過濾條件的值佔的比重小於<10%, 反之 佔90% 的時候,效果就不明顯,或者慢了。

---什麼時候需要用索引?
總體來說:資料量比較大的時候,對常用的查詢的欄位需要建立索引。 索引的數量不是越多越好,一般一個表中不超過5個。
具體要看你 需要優化的SQL來決定: 如果 SQL 中過濾新增有多個,建立索引的時候,就需要用多個欄位


---索引不能太多
1. 索引會影響插入和更新過程,因為索引要隨之重建/更新
2. 索引表會佔用空間,索引欄位越多,索引數量越多,佔的空間也越多。


---什麼場景下需要用到索引?
索引欄位作為過濾條件 where,排序 order by, 分組 group by , 關聯 join on 欄位


--索引的優缺點?
有點: 1. 加快查詢,避免全表掃描
缺點: 1. 額外佔用空間 2. 影響更新和插入的速度


---索引的種類
1.主鍵 --特殊的索引,欄位要唯一
建立主鍵的三種方法:

  • 1. 建立表的時候 欄位後面加 primary key ---只能是一個欄位
  • 2. 建立表的時候 使用約束建立主鍵,把約束作為其中一列,在所有欄位的後面 constraint 約束名稱 primary key (欄位1,欄位2)
  • 3. 建表完成之後,alter table 表名稱 add constraint 約束名稱 primary key (欄位1,欄位2)

---注意事項:表中以後的資料作為主鍵/唯一索引的欄位的資料,不能重複,否則建立失敗
2. 唯一索引 ---欄位要唯一
create unique index 名稱 on 表名(欄位1,欄位2) ----欄位1和欄位2的組合 要求唯一,是單獨的欄位1或者欄位2 是可以重複的
3. 普通索引(一個欄位)
create index
4. 組合索引
create index 名稱 on 表名(欄位1,欄位2) --select count(*) from emp where deptno = 10 and job='SALESMAN';
5. 函式索引 --查詢的欄位帶上了函式,那麼 建立的索引欄位也要帶上函式

例如:

select count(*) from emp where to_char(hiredate,'yyyy-mmm-dd')='2012-08-23'; ---查詢的時候大部分是有時間轉換的

create index index_emp_hiredate on emp(to_char(hiredate,'yyyy-mmm-dd') );---建立索引時也要使用函式

6. bitmap 點陣圖索引


---索引使用的時候應該注意什麼? 什麼時候會失效
---組合索引的使用規則
  ---組合索引

create index index_group on sample_index(item_id,behavior,category_id);

  ---普通索引

create index index_item_id on sample_index(item_id);


  ---組合索引 因為是先排序 再建索引。 欄位的順序是有要求的。

--where behavior= 
--where behavior= and item_id=
--where behavior= and item_id= and category_id=


注:組合索引 使用有規則,必須 按照索引建立的順序來進行 加過濾條件查詢

---檢視常用的元資料儲存位置
百度搜索 oracle 元資料查詢的表
https://blog.csdn.net/qq_46550964/article/details/123915139