1. 程式人生 > >distinct用法和優化

distinct用法和優化

A.distinct的使用

正確的語法

select distinct column1, column2 from table;

這樣就可以查詢出來column1和column2不重複的行

select column1,distinct column2 from table;

這樣就可以查詢出一個oracle錯誤資訊,distinct 只能用在最左邊。

那麼如果有這樣的需求改怎麼辦

例如

create table ssqtest
(
 name varchar2(30),
 age number,
 sex varchar2(2)
)

有四條記錄


需求去掉name重複的行,age行不做去重。,也就是2,4只能保留一條。那麼age就必須要知道需要哪一條,最大的還是最小的,用group by和聚合函式處理。

如果兩行age你都想要保留,那麼可以先group by name和wmsys.wm_concat()函式,至於這個函式用法,不做贅述

B.distinct 的優化

大家都知道distinct 很消耗效能,那麼有什麼辦法呢

1.使用group 代替distinct

根據http://www.itpub.net/thread-1392256-1-1.html,經過驗證基本沒用

2.使用exists代替distinct

參看http://blog.itpub.net/10856805/viewspace-1000690/ 眼睛看花了,而且本人沒有驗證,而且感覺提升空間不大

3.其他

看過很多方法,仔細研究執行計劃會發現和distinct沒什麼具體關係。

總結(相關演算法研究):

distinct oracle 改進後使用hash unique演算法以後效率已經有很大提高,但是仍然會對結果排序,所以效能有一定影響。所以在非必要情況下不建議使用

BUT,看下面一種情況:我和我的小夥伴都驚呆了,

http://tech.it168.com/a2009/1228/829/000000829878.shtml

http://blog.itpub.net/768134/viewspace-1007604/

相關推薦

distinct用法優化

A.distinct的使用 正確的語法 select distinct column1, column2 from table; 這樣就可以查詢出來column1和column2不重複的行 select column1,distinct column2 from table

PostgreSQL之 本地分割槽表的用法優化

資料分割槽的好處 1)分割槽後,單個分割槽表的索引和表都變小了,可以保持在記憶體裡面,適合把熱資料從大表拆分出來的場景。 2)對於大範圍的查詢,大表可以通過索引來避免全表掃描。但是如果分割槽了的話,可以使用分割槽的全表掃描。適合經常要做大範圍掃描的場景,按照

sql優化(oracle)- 第二部分 常用sql用法註意事項

個數 its 用法 記錄 減少 合並 .com 語句 一個 第二部分 常用sql用法和註意事項 1. exists 和 in 2. union 和 union all

SQL中distinct用法 SQL Union作用

SQL Union作用 動態構造一個SQL語句然後執行,構造動態語句的查詢語句如下 SELECT REPLACE(WMSYS.WM_CONCAT(STR),',',' UNION ') FROM (SELECT 'SELECT class_no,stu_name,sex,age FROM ' |

Oracle中distinct用法例項以及Oracle distince 用法刪除重複資料

Oracle中distinct的用法例項 摘要: 此外,distinct 會對返回的結果集進行排序 所以會大大影響查詢效率,大資料集時比較明顯 。所以,最好和order by 結合使用,可以提高效率 。 select  distinct  a,b,c from t;表t裡列

mysql distinct 用法詳解及優化

本事例實驗用表task,結構如下  mysql> desc task; +-------------+------------+------+-----+-------------------+-------+ | Field       | Type    

PHP框架優化-spl_autoload_register()用法__autoload()

寫在前面 最近真是忙壞了,在一個框架的基礎上增加REDIS的基類以及快取設計。所以對之前框架進行了一些優化,重新又研究了下一些php基礎的函式。這些函式可能在框架中很常用,之前見過N多次,這次就記錄下來。有時間的話出一個PHP框架優化系列,關於介紹也是網

MySQL的limit用法分頁查詢的性能分析及優化

中間 復合索引 null sts 含義 設計模式 自然 而不是 mit 申明:本博文轉發於 點擊鏈接跳轉 一、limit用法在我們使用查詢語句的時候,經常要返回前幾條或者中間某幾行數據,這個時候怎麽辦呢?不用擔心,mysql已經為我們提供了這樣一個功能。 SELECT

(轉)關於ES6的 模塊功能 Module 中export import的用法註意之處

關於 tle from tool spa 尋找 import 其它 模塊 關於ES6的 模塊功能 Module 中export import的用法和註意之處 export default 的用法 export default命令用於指定模塊的默認輸出。顯然,一個模塊

腳本引用中使用deferasync用法區別

兩個 不依賴 doc 體驗 html 中文 htm 停止 其他 是的,就是在頁面腳本引用的時候設置defer或者async,為什麽會有這兩個屬相來輔助腳本加載那,因為瀏覽器在遇到script標簽的時候,文檔的解析會停止,不再構建document,有時打開一個網頁上會出現空

oracle_not existsnot in的用法區別

沒有 class oracl 水果 where tle select mark 顯示 (轉 飛翔-方向 積累 沈澱http://www.cnblogs.com/mytechblog/) sql中exists,not exists的用法 exists表示()內子查詢語句返回結

關於redis性能問題分析優化

replica latency fragment 帶寬 more 日誌文件 隨機 2.6 one 一、如何查看Redis性能 info命令輸出的數據可分為10個分類,分別是: server,clients,memory,persistence,stats,repli

Redis 小白指南(三)- 事務、過期、消息通知、管道優化內存空間

如何 入門 系列 code 場景 消息 運算 封裝 c# Redis 小白指南(三)- 事務、過期、消息通知、管道和優化內存空間 簡介   《Redis 小白指南(一)- 簡介、安裝、GUI 和 C# 驅動介紹》 講的是 Redis 的介紹,以及如何在 Windows

反射的用法好處

void 配置 更換 exception 帶來 div framework 行程 int 今天我們就來說一說反射(Reflection ), 反射是什麽呢?反射是動態獲取程序集的元數據(metadata)的一種技術。反射是.NetFramework類庫提供的幫助類,動態加載

ABAP性能優化

nim read 工作區 性能分析工具 dump 如果 str 創建 下使用 哪些工具可以用於性能優化? ST05-性能追蹤。包含SQL追蹤加RFC,隊列和緩存追蹤。SQL追蹤主要用於測量程序中select語句的性能。 SE30-運行時分析。用於測量應用的性能。

nfs部署優化

nfs部署和優化nfs部署和優化一. NFS1. NFS簡介NFS全稱是network file system(網絡文件系統)NFS允許一個系統在網絡上與他人共享目錄和文件。通過使用NFS用戶和程序可以像訪問本地文件一樣訪問遠端系統上的文件。 假如有三臺機器A, B, C它們需要訪問同一個目錄目錄中都是圖片傳

samba 部署優化

samba 部署和優化samba 部署和優化一. samba配置1. 什麽是sambaSamba服務類似於windows上的共享功能,可以實現在Linux上共享文件,windows上訪問,當然在Linux上也可以訪問到。是一種在局域網上共享文件和打印機的一種通信協議,它為局域網內的不同計算機之間提供文件及打印

tomcat配置優化

tomcat配置和優化 tomcat配置和優化1. 配置tomcat服務的訪問端口tomcat默認啟動的是8080,如果你想修改為80,則需要修改server.xml文件:vim /usr/local/tomcat/conf/server.xml 找到:<Connector port="8080" p

ASP.NET MVC Bundles 用法說明(打包javascriptcss)

http debug模式 尋找 所有 ida jquery-ui content end eas 本文主要介紹了ASP.NET MVC中的新功能Bundles,利用Bundles可以將javascript和css文件打包壓縮,並且可以區分調試和非調試,在調試時不進行壓縮,以

Object類的用法作用

object類 用法 方法 屬性 getc 個人 返回 字符串 tcl 一: 現實世界中, 每個人都有自己的父親。類也是這樣,每個類都有一個父類,這個父類是 java.lang.Object。 因此,隨意創建一個類,其實也不是空的,起碼這個類中有Object類中的屬性和方法