SQL優化 索引篇

2021-06-28 17:50:00 字數 1731 閱讀 1961

首先建立測試表

create table test_index(

id number,

name varchar2(200)

);

插入1500000測試資料

declare

name varchar2(200);

id number;

begin

for i in 1..100*100*150 loop

select test_index_s.nextval into id from dual;

name := 'zhangsan'||id;

insert into test_index(id,name) values(id,name);

end loop;

end;

下面測試一下這條sql語句的執行效率

select * from test_index t where t.id = 1234566;
為了防止資料庫已經快取了查詢結果,我們先清空一下快取

--清空共享池

alter system flush shared_pool;

--清空快取池

alter system flush buffer_cache;

來看下sql的執行消耗:

下面在id列上建立索引

create index test_index_n on test_index(id);
清空快取,再看看sql的執行消耗

可以看出索引在資料量比較大的情況下對sql的執行效率有很大程度的影響

當然很多情況下會導致sql不走索引

1.如索引列上存在null值,則不會走索引

update test_index t set t.id = null  where t.id = 100004;
不走索引

過濾掉null值,走索引

當所要查詢的資料大於全部資料的10%左右的時候oracle會自動選擇執行效率較高的全表掃瞄

還有很多種情況會導致sql不走索引

like 『%***xx%』 不走索引

<> 使用不等於號,不走索引

數字列=字串量 這種兩邊型別不一樣,需要隱式轉換時不走索引

等等,不一一枚舉了

SQL優化 索引優化

一 發現哪些sql語句有效能問題 開啟mysql慢查詢日誌對sql語句進行監控 show variables like slow query log 檢視是否開啟慢查詢日誌 set global slow query log on 開啟慢查詢日誌 set global log queries not...

SQL優化(SQL 索引)

檢視表定義 show create table users 檢視表的索引 show index from users 你要獲取第乙個表的所有資訊,你說全表掃瞄快呢還是索引掃瞄快呢?所以當你查詢庫 包括left join中的臨時庫 的所有資訊時,資料庫會選擇最優方法 全表掃瞄!s表dept id na...

sql索引優化

1 b tree索引 b tree索引的特點 以b 樹的結構儲存資料 能加快資料的查詢速度 更適合進行範圍查詢 什麼情況下可以用到b樹索引 1 全值匹配的查詢 eg sn 1111 1111 1111 1111 2 匹配最左字首的查詢 eg sn 1111 3 匹配範圍值的查詢 eg sn sn 4...