4-查詢資料總量-where和having子句的使用以及使用內部函式提速
查詢資料總量-where和having子句的使用以及使用內部函式提速
=====================
1、計算資料總量
有3種做法:
select count(1) from table_name;
select count(*) from table_name;
select count(欄位) from table_name;
個人覺得count(索引過的欄位)速度最快
count(*)其次
count(1)和count(未索引的欄位)最慢
-----------------------
2、where子句與having子句
where子句可以限制以減少查詢出來的資料量
而having子句則是在查詢出來的資料基礎上來進行過濾
所以最好使用where子句代替having子句
SQL> create table an(id int,name varchar2(50) default 'anbaisheng' not null);
表已建立。
SQL> begin
2 for
3 i in 1..10000 loop
4 insert into an (id) values(i);
5 end loop;
6 commit;
7 end;
8 /
PL/SQL 過程已成功完成。
SQL> alter table an modify (name varchar2(50) default 'xiangxiang');
表已更改。
SQL> begin
2 for
3 i in 10001..20000 loop
4 insert into an (id) values(i);
5 end loop;
6 commit;
7 end;
8 /
PL/SQL 過程已成功完成。
SQL> select count(*) from an;
COUNT(*)
----------
20000
SQL> set timing on
SQL> select count(*),name from an group by name having name='xiangxiang';
COUNT(*) NAME
---------- --------------------------------------------------
10000 xiangxiang
已用時間: 00: 00: 00.03
SQL> select count(*),name from an where name='xiangxiang' group by name;
COUNT(*) NAME
---------- --------------------------------------------------
10000 xiangxiang
已用時間: 00: 00: 00.01
效果還是很顯著的
---------------------------------
通過內部函式提高sql效率
SELECT H.EMPNO,E.ENAME,H.HIST_TYPE,T.TYPE_DESC,COUNT(*)
FROM HISTORY_TYPE T,EMP E,EMP_HISTORY H
WHERE H.EMPNO = E.EMPNO
AND H.HIST_TYPE = T.HIST_TYPE
GROUP BY H.EMPNO,E.ENAME,H.HIST_TYPE,T.TYPE_DESC;
通過呼叫下面的函式可以提高效率.
FUNCTION LOOKUP_HIST_TYPE(TYP IN NUMBER) RETURN VARCHAR2
AS
TDESC VARCHAR2(30);
CURSOR C1 IS
SELECT TYPE_DESC
FROM HISTORY_TYPE
WHERE HIST_TYPE = TYP;
BEGIN
OPEN C1;
FETCH C1 INTO TDESC;
CLOSE C1;
RETURN (NVL(TDESC,'?'));
END;
FUNCTION LOOKUP_EMP(EMP IN NUMBER) RETURN VARCHAR2
AS
ENAME VARCHAR2(30);
CURSOR C1 IS
SELECT ENAME
FROM EMP
WHERE EMPNO=EMP;
BEGIN
OPEN C1;
FETCH C1 INTO ENAME;
CLOSE C1;
RETURN (NVL(ENAME,'?'));
END;
SELECT H.EMPNO,LOOKUP_EMP(H.EMPNO),
H.HIST_TYPE,LOOKUP_HIST_TYPE(H.HIST_TYPE),COUNT(*)
FROM EMP_HISTORY H
GROUP BY H.EMPNO , H.HIST_TYPE;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13177610/viewspace-676339/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL中 where 子句和having子句中的區別SQL
- SQL優化] 避免在WHERE子句中對列使用函式SQL優化函式
- having和where
- Python內部函式zip使用Python函式
- truncate和不帶where子句的delete, 以及drop區別delete
- Hive內部函式簡介及查詢語法Hive函式
- 二分查詢函式的使用函式
- MongoDB查詢(陣列、內嵌文件和$where)MongoDB陣列
- [學習筆記]分組資料以及on/where/having的順序問題筆記
- PostgreSQL訪問許可權查詢函式彙總和使用舉例SQL訪問許可權函式
- 資料庫中where與having的區別資料庫
- AWK高階之內部函式使用函式
- group by,having查詢 ”每**“的查詢
- 使用SQL以及函式等做資料分析SQL函式
- Django中views資料查詢使用locals()函式進行優化DjangoView函式優化
- MySQL之Where和Having的區別MySql
- where和having的區別小結
- SQL 中having 和where的區別SQL
- 使用機器學習加速對非結構化資料的查詢-第1部分(使用BlazeIt加速聚合和限制查詢)機器學習
- MyBatis中的<where>標籤和where子句的區別MyBatis
- SQL Server資料庫————模糊查詢和聚合函式SQLServer資料庫函式
- oracle的sql查詢分析函式-高階部分-分析函授over()子句OracleSQL函式
- jpa 聯合查詢資料,查詢使用者資訊與部門資訊
- 使用with子句優化程式碼中重複查詢優化
- 【資料庫】PostgreSQL中使用`SELECT DISTINCT`和`SUBSTRING`函式實現去重查詢資料庫SQL函式
- oracle之group by,having和where的區別Oracle
- 報告彙總資料使用組函式函式
- MySQL-WHERE子句 以及 邏輯操作符MySql
- SQLite中的WHERE子句SQLite
- Laravel 的 where or 查詢Laravel
- Mysql建表、索引、函式、查詢使用中的坑!!!MySql索引函式
- 不使用分析函式的累計統計查詢函式
- count函式與order by子句一起查詢時報錯處理函式
- 【軟體實施面試】MySQL和Oracle聯合查詢以及聚合函式面試總結面試MySqlOracle函式
- MySQL 4.1.0 中文參考手冊 --- 6.3 用於 SELECT 和 WHERE 子句的函式 (1) (轉)MySql函式
- mysql的having和where有什麼區別MySql
- SQL分組中WHERE和HAVING的異同SQL
- 使用sql語句查詢平均值,使用sql語句查詢資料總條數, not in 篩選語句的使用SQL