優化查詢 節省查詢時間

2021-10-16 03:04:15 字數 2700 閱讀 8964

優化查詢

select * from emp2;

1:不要使用 select * ,用具體的字段來代表 *,不要返回用不到的字段。

select ename,sal from emp2 where ename <> 『scott』;

select ename,sal from emp2 where ename != 『scott』;

2:盡量避免在where中使用 <> 或 !=,如果使用了將使資料庫引擎放棄索引進行全表掃瞄。

select ename,sal,comm from emp2 where comm is null;

3:盡量避免在where中對字段進行null判斷,否則將使資料庫引擎放棄索引進行全表掃瞄。

update emp2 set comm=0 where comm is null;

select ename,sal,comm from emp2 where comm=0;

select ename,sal,deptno from emp2 where deptno=10 or deptno=20;

應改為select ename,sal,deptno from emp2 where deptno=10

union

select ename,sal,deptno from emp2 where deptno=20;

4: 應盡量避免在where子句中使用 or 來連線條件,否則將使資料庫引擎放棄索引進行全表掃瞄。

select ename,sal from emp2 where ename like 『%a%』;

select ename,sal from emp2 where ename like 『a%』;

5:一般情況下,不鼓勵使用 like 操作。'a%『可以使用索引,』%a%'將不使用索引。

select deptno,ename from emp2 where deptno in (10,20,30);

改為select deptno,ename from emp2 where deptno between 10 and 30;

6:in 和 not in 也要慎用,否則會導致全表掃瞄。

select ename,deptno,sal from emp2 where sal/2=1500;

改為select ename,deptno,sal from emp2 where sal=1500*2;

7:盡量避免在where子句裡,對欄位進行表示式操作,否則將使資料庫引擎放棄索引進行全表掃瞄。

select ename,sal from emp2 where substring(ename,1,3)=『sco』;

改為select ename,sal from emp2 where ename like 『sco%』;

select ename,hiredate from emp2 where datediff(『1981-9-9』,hiredate) > 0;

改為select ename,hiredate from emp2 where hiredate < 『1981-9-9』;

8:盡量避免在where子句裡,對欄位進行函式操作,否則將使資料庫引擎放棄索引進行全表掃瞄。

9:不要在where子句的 「=」 左邊進行函式。算術運算或其他表示式操作,否則系統將無法正確使用索引。

select ename,deptno from emp2 where deptno in (select deptno from emp2 );

改為select ename,deptno from emp2 e where exists (select 1 from emp2 where deptno= e.deptno);

10: 很多時候用 exists 代替 in 是乙個好的選擇。

create table e***

asselect *

from emp

where 1=2;

改為create table e***(…)

11:不要寫一些沒有意義的查詢,無返回結果但是會消耗系統資源,

如果要生成乙個空的表結構應該直接寫建表語句,不用通過查詢來建表。
12:盡量使用數字型字段,若只含數值資訊的字段盡量不要設計為字元型,

字元在查詢時會逐一比較,而數字只比較一次。
13 盡可能的使用 varchar/nvarchar 代替 char/nchar, 空間小查詢快。

14 避免頻繁的建立和刪除臨時表,以減少系統資源的消耗。

15 盡量避免使用游標,因為游標的效率差,如果游標操作的資料超過1萬行,那麼就應該

考慮改寫。

16:盡量避免向客戶返回大量資料,若資料量過大,應該考慮需求是否合理。

索引的使用問題

什麼情況下不使用索引

1:表記錄太少。

2:經常插入、刪除、 修改的表。

3:經常和主欄位一塊查詢但主字段索引值比較多的表字段。

什麼情況下使用索引

1:表的主關鍵字(主鍵):自動建立了唯一索引;

2:表的字段帶唯一約束的:自動建立了唯一索引;

3:直接條件查詢的字段

在sql中用於條件查詢的字段
4:查詢中與其他表關聯的字段

如外來鍵關聯
5:查詢中的排序字段

6:查詢中統計或分組的字段

乙個表的索參數量 <=6

mysql 查詢時間轉換 Mysql 查詢時間轉換

利用data format函式 select date format now y m d 根據format字串格式化date值 s,s 兩位數字形式的秒 00,01,59 i,i 兩位數字形式的分 00,01,59 h 兩位數字形式的小時,24 小時 00,01,23 h 兩位數字形式的小時,12 ...

linux查詢時間

一 檢視和修改linux的時區 檢視當前時區 命令 date r 修改設定linux伺服器時區 方法 a 命令 tzselect 方法 b 僅限於redhat linux 和 centos 命令 timeconfig 方法 c 適用於debian 命令 dpkg reconfigure tzdata...

mysql日期怎麼優化 Mysql查詢時間優化

select count from table where buytime 2011 5 31 00 00 00 and buytime 2011 6 6 23 59 59 group by itemname select count from table where buytime unix st...