1. 程式人生 > >mysql中count(*),distinct的使用方法和效率研究

mysql中count(*),distinct的使用方法和效率研究

SQL 語句的COUNT有兩種用途
1. 用來計算行數——Count(*)
2. 用來計算某個值的數量——COUNT(col1)
Count(*) 永遠返回的都是結果集中的行數,而COUNT(col1)只返回col1值非空的記錄數,如果col1值全部非空,
Count(*)和COUNT(col1)的結果是相同的。

Count的用法很簡單,可在實際開發過程中還是能找到使用不那麼精確的地方
很多時候我們會利用Count(*)來檢查是否存在滿足條件的資料,例如刪除一個使用者角色的時候,會通過
/****************************************************************************************************/
select count(*) from tbl_user_role user_role where user_role.role_id=#roldId#
/****************************************************************************************************/
來判斷是否使用者角色是否因被某個使用者引用而不能刪除。其實,我們的業務只要求確認是否有滿足的條件的記錄存在,而根本不關心滿足記錄的數量。select count(*)在這個例子中的用法會導致不必要的磁碟掃描和記錄檢索。正確的寫法應該是
/*************************************Mysql***************************************************************************/
select exists (select * from tbl_user_role user_role where user_role.role_id=10 limit 1) 
/*************************************Mysql***************************************************************************/

/*************************************Oracle***************************************************************************/
select count(*) from dual where exists (select * from tbl_user_role user_role where user_role.role_id=10 and rownum=1) 
/*************************************Oracle***************************************************************************/

寫法可能有多種,原理很簡單,就是隻找到符合記錄的第一條就終止查詢。

相關推薦

mysqlcount(*),distinct的使用方法效率研究

SQL 語句的COUNT有兩種用途 1. 用來計算行數——Count(*) 2. 用來計算某個值的數量——COUNT(col1) Count(*) 永遠返回的都是結果集中的行數,而COUNT(col1)只返回col1值非空的記錄數,如果col1值全部非空, Count(*)和COUNT(col1)的結果是相同

mysqlcount函式sum函式的用法

mysql中用於統計的二個函式,而這二個函式通常和group by分組函式配合使用 一、count(*)是統計每一組有多少行 count(*)是將返回表格中所有存在的行的總數包括值為null的行。然而count(列名)將返回表格中除去null以外的所有行的總數(有預設值的

mysql不用儲存過程函式查詢子節點的方法

sql實現:select id from ( select t1.id, if(find_in_set(parent_id, @pids) > 0, @pids := concat(@pids, ',', id),

mysqlRAND()隨便查詢記錄效率問題解決辦法分享

在我們做開發的中效率一直是個問題,特別是對於很多大資料量操作,今天我們碰到一個要隨機查詢資料,一開始我們可能想到最簡單的order by rand() 來操作但效率不敢恭維啊 最近由於需要大概研究了一下MYSQL的隨機抽取實現方法。舉個例子,要從tablename表中隨機提

轉載----編寫高質量代碼:改善Java程序的151個建議(第1章:JAVA開發通用的方法準則___建議1~5)

ase 重載方法 name 原理 .get tin stat eas 容易 閱讀目錄 建議1:不要在常量和變量中出現易混淆的字母 建議2:莫讓常量蛻變成變量    建議3:三元操作符的類型務必一致   建議4:避免帶有變長參數的方法重載 建議5:別讓null值和空值威

mysql日期函數日期的加減運算

一個數 hour %u rdate 時間值 範圍 ddd name 需要 mysql日期運算,日期函數 DAYOFWEEK(date) 返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。這些索引值對應於ODBC標準。 mysql> sel

Java Thread,run方法start方法的區別

bsp 區別 繼續 時間片 ron thread類 等待 nbsp art 兩種方法的區別: 1.start方法 用 start方法來啟動線程,是真正實現了多線程, 通過調用Thread類的start()方法來啟動一個線程,這時此線程處於就緒

objc的類方法實例方法有什麽本質區別聯系

實例 屬於 通過 實例對象 對象方法 self 類方法 緩存 變量 類方法: 類方法是屬於類對象的 類方法只能通過類對象調用 類方法中的self是類對象 類方法可以調用其他的類方法 類方法中不能訪問成員變量 類方法中不能直接調用對象方法 類方法是存儲在元類對象的方法緩存

MySQLDATETIME、DATETIMESTAMP類型的區別

有一個 pda not mat date_add after () day format 一、DATETIME 顯示格式:YYYY-MM-DD HH:MM:SS時間範圍:[ ‘1000-01-01 00:00:00‘到‘9999-12-31 23:59:59‘] 二、DAT

js的filter方法map方法

filter map 方法 總結filter方法是對數據中的元素進行過濾,也就是說是不能修改原數組中的數據,只能讀取原數組中的數據,callback需要返回布爾值為true的時候,對應的元素留下來,為false的時候,對應的元素過濾掉filter方法的使用:對應的結果:如果我們嘗試對原數組中的元素進行修改,會

JS的call()方法apply()方法用法總結

con get global message 傳遞參數 接收 ESS tty 一般來說 原文引自:https://blog.csdn.net/ganyingxie123456/article/details/70855586 最近又遇到了JacvaScript中的cal

JavaScript的match方法search方法

reg mys search result 規範 全部 找工作 它的 高效 search在一個字串對象(string object)中查找關鍵詞字串(規範表達式,regular expression),若匹配(即在目標字串中成功找到關鍵詞)則返回關鍵詞在目標字串中第一次出現

mysql分頁 mysql利用編號id每頁條數來進行分頁

1.mysql分頁 【語句順序】        select 選擇的列        from 表  

MySQLDate,DateTime,TimeStampTime的解釋區別

以下場景應用及後臺取值 用到com.alibaba.fastjson.annotation(fastjson 阿里巴巴開源框架)以及springBoot註解 Date 名稱 解釋 顯示格式

Python的類方法靜態方法

作者:黎智煊 ,叩丁狼高階講師。本文為原創文章,轉載請註明出處。     類方法 是類物件所擁有的方法,需要用修飾器@classmethod來標識其為類方法,對於類方法,第一個引數必須是類物件,一般以cls作為第一個引數(當然可以用其他名稱的變數作

mysql使用group byorder by取每個分組日期最大一行資料

轉載自:https://blog.csdn.net/shiyong1949/article/details/78482737 自己實際使用的時候group by 單列欄位 兩種方式獲取資料一致,博主情況未知,有待驗證多group by  在mysql中使用group by進行分組後取某一列的最大

學會使用MySQL自定義函式儲存過程

一、快速瞭解什麼是儲存過程和函式?   儲存過程和函式是事先經過編譯並存儲在資料庫中的一段 SQL 語句的集合,呼叫儲存過程 和函式可以簡化應用開發人員的很多工作,減少資料在資料庫和應用伺服器之間的傳輸,對 於提高資料處理的效率是有好處的。   在對儲存過程或函式進行操作時,需要

List去重(資料為物件的情況)及String的equals()方法hashCode()方法原始碼分析

面試中經常被問到的list如何去重,用來考察你對list資料結構,以及相關方法的掌握,體現你的java基礎學的是否牢固。 我們大家都知道,set集合的特點就是沒有重複的元素。如果集合中的資料型別是基本資料型別,可以直接將list集合轉換成set,就會自動去除重複的元素,這個就相對比較簡單。上一篇

eclipseMysql的小坑問題解決

1.Eclipse 中一直顯示building。。。。 網上的方法基本都是設定validation 不勾選js驗證。。。但是我得匯入下來的專案還是一直building 開啟專案的所在目錄,你會發現有個 看見 <buildCommand>  &nbs

mysql的prepare介紹應用

連接 示例 context 簡單的 數據 delet 問題 skip 用法 簡單的用set或者declare語句定義變量,然後直接作為sql的表名是不行的,mysql會把變量名當作表名。在其他的sql數據庫中也是如此,mssql的解決方法是將整條sql語句作為變量,其中穿插