實例講解MySQL統計庫表大小_Mysql

來源:腳本之家  責任編輯:小易  

從用戶角度來看,一個視圖是從一個特定的角度來查看數據庫中的數據。從數據庫系統內部來看,一個視圖是由SELECT語句組成的查詢定義的虛擬表。從數據庫系統內部來看,視圖是由一張或多張表中的數據組成的,從數據庫系統外部來看,視圖就如同一張表一樣,對表能夠進行的一般操作都e5a48de588b6e79fa5e9819331333264633437可以應用于視圖,例如查詢,插入,修改,刪除操作等。更多視圖的知識,請在這里查看http://baike.baidu.com/view/71981.htm語法CREATE VIEW view[(field1[,field2[,.]])]AS selectstatementCREATE VIEW 語句可分為以下幾個部分:部分 說明view 欲創建的索引的名稱。field1,field2 選擇語句中標明的相應字段名.示例:CREATE VIEW CustomersASSELECT*FROM CompanyData.dbo.Customers_33www.anxorj.tw防采集請勿采集本網。

統計每個庫每個表的大小是數據治理的其中最簡單的一個要求,本文將從抽樣統計結果及精確統計結果兩方面來統計MySQL的每個庫每個表的數據量情況。

rq=` date+Y%m%d ` tar zcvf/mysqldata/mysql$rq.tar.gz/var/lib/mysql 或者寫成 rq=` date+Y%m%d ` mysqldump-all-databases-u root-p密碼>/mysqldata/mysql$rq.sql/var/lib/mysql是你數據庫文件的目錄,

1、統計預估數據量

看官方的文檔比較給力。

mysql數據字典庫information_schema里記錄了統計的預估數據量(innodb引擎表不準確,MyISAM引擎表準確)及數據大小、索引大小及表碎片的大小等信息。

原發布者:loveatleft 基于工程量清單模式下的投標報價及綜合單價研究補充材料第一部分清單模式下投標報價的特點目錄第二部分清單模式下的綜合單價第三部分綜合單價的確定第四部分投標報價策略的應用第五

如果想了解每個庫及表的大概數據量級,可以直接查information_schema.tables進行統計即可。例如:

拒絕虛假統計數字,真正做到走村入戶走訪貧困戶,拉近彼此距離獲得群眾信任,真實了解訴求,講解中央政策、產業補助等,讓群眾切實感受到黨和國家的關懷。做到善用巧勁。扶貧工作復雜繁瑣,如果沒有上級的

SELECT table_schema,table_name,table_rows,data_length+index_length+ data_free data_size FROM information_schema.`TABLES` WHERE table_schema IN ('db1','db2');

其中data_size單位為B

如上文所述,統計信息里的數據條數及size是根據部分數據抽樣統計的值,與實際大小存在差異,且表越大,差異越明顯,如果想知道每張表的實際情況,需用后續的方法。

2、統計實際數據量

想要統計每張表的實際大小就得去遍歷每個表算出對的記錄數,通過查看表空間大。總表獨立表空間)查看每個表的size。通過以下步驟即可達到精確統計的目的。

創建路徑

創建一個工作路徑,保存腳本及臨時文件等

mkdir -p /usr/local/data_size

創建統計庫及表

在需要統計的數據庫實例上創建統計庫

SQL> create database bak_db;

創建統計的存儲過程

SQL> use bak_db;SQL>CREATE PROCEDURE `p_db_size`()BEGINDECLARE v_id INT;DECLARE v_maxid INT;DECLARE v_tbname VARCHAR(50);DECLARE v_dbname VARCHAR(50);DECLARE v_sql_upd VARCHAR(200);SET v_id =(SELECT MIN(id) FROM bak_db.tb_size);SET v_maxid =(SELECT MAX(id) FROM bak_db.tb_size);WHILE v_id <=v_maxidDOSET v_tbname = (SELECT tbname FROM bak_db.tb_size WHERE id=v_id);SET v_dbname = (SELECT dbname FROM bak_db.tb_size WHERE id=v_id);SET v_sql_upd = CONCAT('update bak_db.tb_size set tb_rows=(select count(*) from ',v_dbname,".",v_tbname,") where id=",v_id); SET @v_sql_upd := v_sql_upd; PREPARE stmt FROM @v_sql_upd; EXECUTE stmt ; DEALLOCATE PREPARE stmt; SET v_id = v_id +1;END WHILE; END;

創建腳本

vim data.sh/* 插入如下內容*/#! /bin/bashcd /usr/local/data_sizedu -s /data/mysql/mysql3306/data/db1/* |grep -v ".frm" |grep -v ".opt" >/usr/local/data_size/data_size du -s /data/mysql/mysql3306/data/db2/* |grep -v ".frm" |grep -v ".opt">>/usr/local/data_size/data_size# 后面4步是拼接成sql awk '{print "insert into bak_db.tb_size(size,tb_route)values("""$0}' /usr/local/data_size/data_size >/usr/local/data_size/data_size1 awk '{print $0";"}' /usr/local/data_size/data_size1 >/usr/local/data_size/data_size.sqlsed -i "s#\t#,'#g" /usr/local/data_size/data_size.sqlsed -i "s#;#');#g" /usr/local/data_size/data_size.sql# 創建統計表 /usr/local/mysql5.7/bin/mysql -uroot -p'Test#123456' -h 192.168.28.132 -e "drop table if exists bak_db.tb_size;CREATE TABLE IF NOT EXISTS bak_db.tb_size ( id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT ,size INT,tb_route VARCHAR(200),tbname VARCHAR(50),dbname VARCHAR(50),tb_rows INT(11));" # 導入數據 /usr/local/mysql5.7/bin/mysql -uroot -p'Test#123456' -h 192.168.28.132 -e "use bak_db;truncate table bak_db.tb_size;source /usr/local/data_size/data_size.sql;"# 生成庫名及表名,當然該步驟也可以從數據字段中獲取 /usr/local/mysql5.7/bin/mysql -uroot -p'Test#123456' -h 192.168.28.132 -e "use bak_db;UPDATE bak_db.tb_size SET tbname=REPLACE(SUBSTRING_INDEX(tb_route,'/',-1),'.ibd','');" /usr/local/mysql5.7/bin/mysql -uroot -p'Test#123456' -h 192.168.28.132 -e "UPDATE bak_db.tb_size SET dbname=LEFT (SUBSTRING_INDEX(tb_route,'/',-2),INSTR(SUBSTRING_INDEX(tb_route,'/',-2),'/')-1);"sleep 10 # 如果之前的步驟在主庫金學習學習,則建議暫停一段時間 以免后面統計的時候無法獲得表及內容,如果前面的步驟都在從庫,則可以省略該步驟echo 'start call procedure' # 調用存儲過程 統計每個表的記錄條數/usr/local/mysql5.7/bin/mysql -uroot -p'Test#123456' -h 192.168.28.132 -e "use bak_db;call bak_db.p_db_size();"# 把表及數據導出/usr/local/mysql5.7/bin/mysqldump -uroot -p'Test#123456' -h 192.168.28.132 --single-transaction bak_db tb_size >/usr/local/data_size/tb_size.sql# 將表及結果導入主庫(從庫相當于刪除在重建了一次)/usr/local/mysql5.7/bin/mysql -uroot -p'Test#123456' -h 192.168.28.128 -e "use bak_db;source /usr/local/data_size/tb_size.sql;"

結果如下:

可以看出精確值與統計信息里的值差異還是很大的,且表越大 差異越明顯。

TIPS:  本文精確統計的腳本還有許多優化空間,寫的比較倉促,大家可以按需自行調整,水平有限,歡迎斧正。如有問題,歡迎與我溝通。

以上就是實例講解MySQL統計庫表大小的詳細內容,更多關于MySQL統計庫表大小的資料請關注真格學網其它相關文章!

project:*通用模塊(用 c++ 處理 mysql 數據庫類,像ADO)*description:*通過DataBase,RecordSet,Record,Field類,實現對mysql數據庫的操作*包括連接、修改、添加、刪除、查詢等等,像ADO一樣操作數據庫,使*用方便*(the end of this file have one sample,*welcom to use.)*file:zlb_mysql.h*author:@zlb*time:2005-12-12*-*/ifndef ZLB_MYSQL_H#define ZLB_MYSQL_H#include"mysql.h"#include<iostream>#include<vector>#include<string>using namespace std;namespace zlb_mysql{/*字段操作*/class Field { public:/*字段名稱*/vector<string>m_name;字段類型*/vector<enum_field_types>m_type;public:Field();Field();是否是數字*/bool IsNum(int num);是否是數字*/bool IsNum(string num);是否是日期*/bool IsDate(int num);是否是日期*/bool IsDate(string num);是否是字符*/bool IsChar(int num);是否是字符*/bool IsChar(string num);是否為二進制數據*/bool IsBlob(int num);是否為二進制數據*/bool IsBlob(string num);得到指定字段的序號*/int GetField_NO(string field_name);};1 單條記錄*2[int]操作[""]操作*/class Record { public:/*結果集*/vector<string>m_rs;字段信息 占用4字節的內存 當記錄數很大是回產生性能問題*/Field*m_field;public:Record(){};Record(Field*m_f);Record();void SetData(string value);[""]操作*/string operator[](string s);string operator[](int num);null值判斷*/bool IsNull(int num);bool IsNull(string s);用 value tab value 的形式 返回結果*/string GetTabText();};1 記錄集合*2[int]操作[""]操作*3 表結構操作*4 數據的插入修改*/class RecordSet { private:/*記錄集*/vector<Record>m_s;游標位置*/unsigned long pos;記錄數*/int m_recordcount;字段數*/int m_field_num;字段信息*/Field m_field;MYSQL_RES*res;MYSQL_FIELD*fd;MYSQL_ROW row;MYSQL*m_Data;public:RecordSet();RecordSet(MYSQL*hSQL);RecordSet();處理返回多行的查詢,返回影響的行數*/int ExecuteSQL(const char*SQL);得到記錄數目*/int GetRecordCount();得到字段數目*/int GetFieldNum();向下移動游標*/long MoveNext();移動游標*/long Move(long length);移動游標到開始位置*/bool MoveFirst();移動游標到結束位置*/bool MoveLast();獲取當前游標位置*/unsigned long GetCurrentPos()const;獲取當前游標的對應字段數據*/bool GetCurrentFieldValue(const char*sFieldName,char*sValue);bool GetCurrentFieldValue(const int iFieldNum,char*sValue);獲取游標的對應字段數據*/bool GetFieldValue(long index,const char*sFieldName,char*sValue);bool GetFieldValue(long index,int iFieldNum,char*sValue);是否到達游標尾部*/bool IsEof();返回字段*/Field*GetField();返回字段名*/const char*GetFieldName(int iNum);返回字段類型*/const int GetFieldType(char*sName);const int GetFieldType(int iNum);返回指定序號的記錄*/Record operator[](int num);};1 負責數據庫的連接關閉*2 執行sql 語句(不返回結果)*3 處理事務*/class DataBase { public:DataBase();DataBase();private:/*msyql 連接句柄*/MYSQL*m_Data;public:/*返回句柄*/MYSQL*GetMysql();連接數據庫*/int Connect(string host,string user,string passwd,string db,unsigned int port,unsigned long client_flag);關閉數據庫連接*/void DisConnect();執行非返回結果查詢*/int ExecQuery(string sql);測試mysql服務器是否存活*/int Ping();關閉mysql 服務器*/int ShutDown();主要功能:重新啟動mysql 服務器*/int ReBoot();說明:事務支持InnoDB or BDB表類型*/*主要功能:開始事務*/int Start_Transaction();主要功能:提交事務*/int Commit();主要功能:回滾事務*/int Rollback();得到客戶信息*/const char*Get_client_info();主要功能:得到客戶版本信息*/const unsigned long Get_client_version();主要功能:得到主機信息*/const char*Get_host_info();主要功能:得到服務器信息*/const char*Get_server_info();主要功能:得到服務器版本信息*/const unsigned long Get_server_version();主要功能:得到 當前連接的默認字符集*/const char*Get_character_set_name();主要功能返回單值查詢*/char*ExecQueryGetSingValue(string sql);得到系統時間*/const char*GetSysTime();建立新數據庫*/int Create_db(string name);刪除制定的數據庫*/int Drop_db(string name);};};endif/ZLB_MYSQL_H/*project:*通用模塊(用 c++ 處理 mysql 數據庫類,像ADO)*description:*通過DataBase,RecordSet,Record,Field類,實現對mysql數據庫的操作*包括連接、修改、添加、刪除、查詢等等,像ADO一樣操作數據庫,使*用方便*(the end of this file have one sample,*welcom to use.)*file:zlb_mysql.cpp*author:@zlb*time:2005-12-12*-*/include"stdafx.h"#include"zlb_mysql.h"namespace zlb_mysql{/*+*/*字段操作*/Field:Field(){} Field:~Field(){}/*是否是數字*/bool Field:IsNum(int num){ if(IS_NUM(m_type[num]))return true;else return false;}/*是否是數字*/bool Field:IsNum(string num){ if(IS_NUM(m_type[GetField_NO(num)]))return true;else return false;}/*是否是日期*/bool Field:IsDate(int num){ if(FIELD_TYPE_DATE=m_type[num]|FIELD_TYPE_DATETIME=m_type[num])return true;else return false;}/*是否是日期*/bool Field:IsDate(string num){ int temp;temp=GetField_NO(num);if(FIELD_TYPE_DATE=m_type[temp]|FIELD_TYPE_DATETIME=m_type[temp])return true;else return false;}/*是否是字符*/bool Field:IsChar(int num){ if(m_type[num]=FIELD_TYPE_STRING|m_type[num]=FIELD_TYPE_VAR_STRING|m_type[num]=FIELD_TYPE_CHAR)return true;else return false;}/*是否是字符*/bool Field:IsChar(string num){ int temp;temp=this->GetField_NO(num);if(m_type[temp]=FIELD_TYPE_STRING|m_type[temp]=FIELD_TYPE_VAR_STRING|m_type[temp]=FIELD_TYPE_CHAR)return true;else return false;}/*是否為二進制數據*/bool Field:IsBlob(int num){ if(IS_BLOB(m_type[num]))return true;else return false;}/*是否為二進制數據*/bool Field:IsBlob(string num){ if(IS_BLOB(m_type[GetField_NO(num)]))return true;else return false;}/*得到指定字段的序號*/int Field:GetField_NO(string field_name){ for(unsigned int i=0;i();i+){ if!m_name[i].compare(field_name))return i;} return-1;}/*-*/*+*/*1 單條記錄*2[int]操作[""]操作*/Record:Record(Field*m_f){ m_field=m_f;} Record:~Record(){};void Record:SetData(string value){ m_rs.push_back(value);}/*[""]操作*/string Record:operator[](string s){ return m_rs[m_field->GetField_NO(s)];} string Record:operator[](int num){ return m_rs[num];}/*null值判斷*/bool Record:IsNull(int num){ if(""=m_rs[num].c_str())return true;else return false;} bool Record:IsNull(string s){ if(""=m_rs[m_field->GetField_NO(s)].c_str())return true;else return false;}/*主要-功能:用 value tab value 的形式 返回結果*/string Record:GetTabText(){ string temp;for(unsigned int i=0;i();i+){ temp+m_rs[i];if(i()-1)temp+"\\t;} return temp;}/*-*/*+*/*1 記錄集合*2[int]操作[""]操作*3 表結構操作*4 數據的插入修改*/RecordSet:RecordSet(){ res=NULL;row=NULL;pos=0;} RecordSet:RecordSet(MYSQL*hSQL){ res=NULL;row=NULL;m_Data=hSQL;pos=0;} RecordSet:~RecordSet(){ }/*處理返回多行的查詢,返回影響的行數*成功返回行數,失敗返回-1*/int RecordSet:ExecuteSQL(const char*SQL){ if!mysql_real_query(m_Data,SQL,strlen(SQL))){/保存查詢結果 res=mysql_store_result(m_Data);得到記錄數量 m_recordcount=(int)mysql_num_rows(res);得到字段數量 m_field_num=mysql_num_fields(res);for(int x=0;fd=mysql_fetch_field(res);x+){ m_field.m_name.push_back(fd->name);m_field.m_type.push_back(fd->type);}/保存所有數據 while(row=mysql_fetch_row(res)){ Record temp(&m_field);for(int k=0;k;k+){..內容來自www.anxorj.tw請勿采集。


  • 本文相關:
  • php+mysql統計該庫中每個表的記錄數并按遞減順序排列的方法
  • 如何提高mysql數據庫的查詢統計速度 select 索引應用
  • python 連接數據庫mysql解壓版安裝配置及遇到問題
  • mysql 刪除數據庫drop database詳細介紹
  • 你有沒有遺忘mysql的歷史記錄
  • mysql對于各種鎖的概念理解
  • ubuntu server下mysql數據庫備份腳本代碼
  • mysql 8.0.17 安裝配置方法圖文教程
  • mysql 數據庫更新錯誤的解決方法
  • mysql 字符集的系統變量說明
  • mysql 5.6.24 安裝配置方法圖文教程
  • mysql中隨機生成固定長度字符串的方法
  • 實例講解如何使用C++操作MySQL數據庫類
  • SQL中視圖的定義與作用是什么?做好結合實例講解一下,視圖能存儲數據嗎?與表有什么區別?
  • 實例講解PS幾種模糊效果
  • 如何講解案例分析
  • 實例講解如何利用crontab定時備份MySQL
  • MySQL有什么經典的入門書籍沒有?能通過講解MySQL將數據庫原理融會貫通的?
  • 綜合單價講解與實例計算(絕對實用)
  • 談談如何做好扶貧攻堅工作?
  • 實例講解教你讀懂路由表
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess數據庫文摘數據庫其它首頁php+mysql統計該庫中每個表的記錄數并按遞減順序排列的方法如何提高mysql數據庫的查詢統計速度 select 索引應用python 連接數據庫mysql解壓版安裝配置及遇到問題mysql 刪除數據庫drop database詳細介紹你有沒有遺忘mysql的歷史記錄mysql對于各種鎖的概念理解ubuntu server下mysql數據庫備份腳本代碼mysql 8.0.17 安裝配置方法圖文教程mysql 數據庫更新錯誤的解決方法mysql 字符集的系統變量說明mysql 5.6.24 安裝配置方法圖文教程mysql中隨機生成固定長度字符串的方法mysql安裝圖解 mysql圖文安裝教程can""""t connect to mysql servwindows下mysql5.6版本安裝及配置mysql字符串截取函數substring的mysql創建用戶與授權方法mysql提示:the server quit withmysql——修改root密碼的4種方法mysql日期數據類型、時間類型使用mysql update語句的用法詳解mysql 的case when 語句使用說明mysql數據庫設置遠程訪問權限方法小結mysql中對表連接查詢的簡單優化教程can""""t connect to mysql server on lomac下mysql 5.7.17 安裝配置方法圖文教程windows下mysql數據庫主從配置教程mysql unsigned 用法及相減出現補數溢出解阿里云 centos7.3安裝mysql5.7.18 rpm安裝mysql筆記之觸發器的應用windows server2014 安裝 mysql applyingwindows 8下mysql community server 5.6安
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.anxorj.tw All Rights Reserved
    陕西快乐10分下载