mysql大表中count()的用法以及mysql中count()的優化

2020-12-05 百家號

本篇文章給大家帶來的內容是關於mysql大表中count()的用法以及mysql中count()的優化,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

一個單表中包含有6000w+的數據,然而你又不能拆分.需要分別統計表中有多少數據,A產品有多少,B產品有多少這幾個數據.

在為優化之前.表結構如下,為了隱藏內容我將相應欄位做了模糊化處理.

CREATE TABLE `xxxx` (

`link` varchar(200) DEFAULT NULL,

`test0` varchar(500) DEFAULT NULL,

`test1` varchar(50) DEFAULT NULL,

`test2` int(11) DEFAULT NULL,

`test3` varchar(20) DEFAULT NULL,

`test4` varchar(50) DEFAULT NULL,

`test5` varchar(50) NOT NULL,

`inserttime` datetime DEFAULT NULL,

`test6` bit(1) NOT NULL DEFAULT b'0',

`A` bit(1) NOT NULL DEFAULT b'0',

`B` bit(1) NOT NULL DEFAULT b'0' ,

PRIMARY KEY (`test5`),

KEY `test6` (`test6`) USING BTREE,

KEY `A` (`A`) USING BTREE

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

這個一個常規的InnoDB的表格,所以它的count(*)比起MyISAM的效率慢很多,InnoDB所顯示的row的行數不很準確,所以在這這裡我需要統計一下.有這麼幾個策略.共計61500000數據

count(*) 耗時 1539.499s

count(1) 耗時 907.581s

count(A) 對索引進行count.

count(test6) 對主鍵進行count.

無一例外,由於這個表沒有優化好上面無論哪一種都需要幾千秒的時間,這個是我們無法忍受的.

下面我們開始著手分析處理這個問題.

預期整個表的count(*)應該在200s以內為正常,100以內為良好,50以內為優秀.

首先我將裡面test6抽取了出來,單獨形成了一個表.對其進行操作.共計61500000數據

count(*) 耗時10.238s

count(1) 耗時8.710s

count(test6) 對主鍵進行count.耗時12.957s

其中

count(1)

的效率最高,比最慢

count(pk)

速度提升了52.0%.

將你能確定的欄位改為最優值,例如:

varchar更為char.雖然varchar可以自動分配存儲空間的大小但是.varchar需要使用1到2個額外的字節來記錄字符串的長度,增加它的update的操作時間,

datetime改為timestamp後者在1978-2038年之間

最後使用count(1)檢驗的時候最快耗時,168s.雖然有些慢但是可以接受.

總結:

重新設計你表中的欄位,儘量優化它的長度.不要一味使用過多的varchar.

使用count(1)而不是count(*)來檢索.

關於count的詳細介紹

以上就是mysql大表中count()的用法以及mysql中count()的優化的詳細內容,更多請關注php中文網其它相關文章!

相關焦點

  • MySQL count(*),count(1),count(field)區別、性能差異及優化建議
    MySQL count函數是用來獲取表中滿足一定條件的記錄數,常見用法有三種,count(*),count(1),count(field),這三種有什麼區別?在性能上有何差異?本文將通過測試案例詳細介紹和分析。
  • mysql學習詳記六&&關鍵字執行順序&mysql內置函數
    注意:雖然select在having後執行,但是mysql中仍然可以在having中使用select語句定義的別名。原因分析:mysql在查詢的時候會產生一個臨時表,所有的欄位名稱(別名)在臨時表中已經產生,產生了臨時表之後才會進行having操作。
  • mysql 常用命令二
    【資料庫回歸與備份】#導出資料庫中表# mysqldump --opt aa>aa.sql;mysqldump --opt aa b c >aa.b.c.sql;//將資料庫aa中的表b和表c備份到文件aa.b.c.sql中#導入表# 1)create database school;
  • 良心文章|MySQL性能優化分區之實戰(最全面最完整的分區)
    分區有利於管理非常大的表,它採用分而治之的邏輯,分區引入了分區鍵的概念,分區鍵用於根據某個區間值(或者範圍值)、特定值列表或者hash函數值執行數據的聚集,讓數據根據規則分布在不同的分區中,讓一個大對象碧昂城一些小對象。MySQL分區即可以對數據進行分區也可以對索引進行分區。
  • mysql 矩陣類型專題及常見問題 - CSDN
    資料庫是為了方便對數據進行存儲以及管理的。隔離性是指當多個用戶並發訪問資料庫時,比如同時訪問一張表,資料庫每一個用戶開啟的事務,不能被其他事務所做的操作幹擾(也就是事務之間的隔離),多個並發事務之間,應當相互隔離。持久性是指事務的操作,一旦提交,對於資料庫中數據的改變是永久性的,即使資料庫發生故障也不能丟失已提交事務所完成的改變。
  • Python連接MySQL資料庫方法介紹(超詳細!手把手項目案例操作)
    >data = cur.fetchall() # 通過fetchall方法獲得數據for i in data[:2]: # 列印輸出前2條數據print (i)cur.close() # 關閉遊標conn.close() # 關閉連接上述代碼中,
  • MySQL show profile使用說明
    show profile 和 show profiles 命令用於展示SQL語句的資源使用情況,包括CPU的使用,CPU上下文切換,IO等待,內存使用等,這個命令對於分析某個SQL的性能瓶頸非常有幫助,藉助於show profile的輸出信息,能讓我們知道一個SQL在哪個階段耗時最長,消耗資源最多,從而為SQL優化
  • 了解資料庫類型及MySQL資料庫常用命令行
    >MongoDB、Redis3、mysql軟體:Sql yog:資料庫客戶端工具(圖形用戶界面工具)方便操作資料庫。delete from 表名 where 條件;七、查詢1、查詢表中所有的數據select * from 表名;2、條件查詢select * from 表名 where
  • 一千行MySQL學習筆記
    升序:ASC,降序:DESC        以下[合計函數]需配合 group by 使用:    count 返回不同的非NULL值數目    count(*)、count(欄位)    sum 求和    max 求最大值    min 求最小值    avg 求平均值    group_concat 返回帶有來自一個組的連接的非NULL
  • mysql學習詳記四&&資料庫的備份及恢復&&mysql多表設計&外鍵約束
    一、mysql資料庫的備份及恢復備份資料庫表中的數據cmd> mysqldump -u 用戶名 -p 資料庫名 > 文件名.sqlmysqldump -uroot -p db_name > d:/1.sql
  • 英語count the cost 的用法
    在現實生活中,我們做很多事性都要考慮一下後果,預估一下風險,那麼如何用英語表達呢?對,count the cost 就是一個很好的選擇。字表意思也很吻合,數一數成本!今天我們一起通過幾個例句來學習一下這個詞組的用法。
  • MySQL - mysqldump常用命令 - linux運維菜
    導出數據1、備份全部資料庫的數據和表結構mysqldump -uroot -ppassword -A >all.sql2、只備份表結構,不備份數據mysqldump -uroot -ppassword -A -d > database.sql3、只備份資料庫,不備份表結構mysqldump -uroot -ppassword -A -t > data.sql
  • 使用explain和show profile來分析SQL語句實現優化SQL語句
    SQL語句優化是建立在慢查詢分析的基礎上,通過慢查詢定位有問題的SQL語句,關於慢查詢的介紹及其分析工具,可以參考[mysql慢查詢及慢查詢日誌分析工具]一、通過explain查詢1 用法:explain sql2 作用:用於分析sql語句(1)、id:執行explain的一個編號(沒有實際意義)(2)、
  • MySQL敏感數據怎麼加密 數據加密解密教程
    大數據時代的到來,數據成為企業最重要的資產之一,數據加密的也是保護數據資產的重要手段。本文主要在結合學習通過MySQL函數及Python加密方法來演示數據加密的一些簡單方式。1.
  • MySQL優化:學會使用show profile和trace分析慢查詢
    看本篇之前建議先看上篇:MySQL優化:定位慢查詢的兩種方法以及使用explain分析SQL在上一節我們學習了定位慢 SQL 及使用 explain 分析慢 SQL,我們也提到了分析慢 SQL 還有 show profile 和 trace 等方法,本節就重點補充學習這兩種方法。
  • MySQL 備份數據那點事
    mysqldump什麼是 mysqldump ?mysqldump 是 MySQL 用於執行邏輯備份的一款工具,可以根據原始資料庫對象以及表的定義和數據來生成一系列可以被執行的 SQL 語句。通常我們用它作為備份或者遷移數據。
  • 關於mysql中運算符與函數的概述
    運算符是告訴mysql執行特定的算術或邏輯操作的符號,運算符連接著各個表達式中的操作數,其作用是用來指明對操作數進行的運算。字符函數:1.字符串連接函數:2.字符中轉換大小寫函數:3mysql日期時間函數:1.獲取當前日期的函數:
  • 選擇pgsql還是mysql?
    引言:關係型資料庫的使用場景中,mysql這麼好用,為什麼要考慮pgsql?看完這篇文章也許你會有不同的想法。概述:mysql出現在1994年,現在所有權歸屬oracle,創始人現在又發布了新的免費開源資料庫MariaDB,現在開源關係型資料庫領域,mysql使用確實是最廣泛的,官方說許多世界上最大、發展最快的組織都在使用mysql。pgsql又稱PostgresSQL,出現在1986年,官方標榜自己是世界上最先進最高級的開源關係型資料庫。
  • 簡單學資料庫:什麼是外鍵約束,以及什麼是表關係?
    今天我們和大家分享的是什麼是外鍵約束,以及什麼是表的結構。我們廢話不多說,馬上開始我們今天的分享。MYSQLmysql是關係型資料庫,關係資料庫,是建立在關係模型基礎上的資料庫,現實世界中的各種實體,以及實體之間的各種聯繫,均用關係模型(table)來表示。
  • 如何將 MySQL 去重操作優化到極致?|CSDN 博文精選
    insert into t_source select * from t_source where item_id=1;源表中有1000001條記錄,去重後的目標表應該有500000條記錄。巧用索引與變量1.