優化查詢
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...