亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

概述

前面已經(jīng)介紹了Oracle如何去獲取某用戶下的所有表的行數(shù),所以就不介紹了,今天主要分享的是怎么去獲取MySQL數(shù)據(jù)庫下所有表的數(shù)據(jù)行數(shù),主要介紹3個方法。


1、估算某個數(shù)據(jù)庫下的所有表的記錄數(shù)

可以用MySQL 自帶的information_schema.tables 表的統(tǒng)計信息,初步判斷表的數(shù)據(jù)行大小。

select table_schema,table_name,table_type,table_rows from information_schema.tables where table_schema='fsl_prod' order by table_rows desc;
詳解mysql數(shù)據(jù)庫三種快速獲得某個數(shù)據(jù)庫下的所有表的記錄數(shù)方法

 

對于非事務(wù)性表, table_rows 這個值是精確的,對于事務(wù)性引擎,這個值通常是估算的。例如 MyISAM 存儲精確的數(shù)目。對于其它存儲引擎,比如InnoDB本值是一個大約的數(shù),與實際值相差可達(dá)40到50%。在這些情況下,使用SELECT COUNT(*) 來獲得準(zhǔn)確的數(shù)目。對于在information_schema數(shù)據(jù)庫中的表,Rows值為NULL。


2、sql拼接統(tǒng)計某個數(shù)據(jù)庫下的所有表的記錄數(shù)(有點(diǎn)麻煩)

可以使用如下的 SQL 語句來批量統(tǒng)計數(shù)據(jù)庫中的表的行數(shù):

SELECT
 CONCAT( 'SELECT "', TABLE_NAME, '", COUNT(*) FROM ', TABLE_SCHEMA, '.', TABLE_NAME, ' UNION ALL' ) EXEC_SQL 
FROM
 INFORMATION_SCHEMA.TABLES 
WHERE
 TABLE_SCHEMA = 'fsl_prod';
詳解mysql數(shù)據(jù)庫三種快速獲得某個數(shù)據(jù)庫下的所有表的記錄數(shù)方法

 

把生成的 SQL 語句拷貝出來,并去掉最后的一個“ UNION ALL ”就可以執(zhí)行了。產(chǎn)生的示例 SQL 如下所示:

SELECT "act_demo_test", COUNT(*) FROM fsl_prod.act_demo_test UNION ALL
SELECT "act_demo_vacation", COUNT(*) FROM fsl_prod.act_demo_vacation UNION ALL
SELECT "act_evt_log", COUNT(*) FROM fsl_prod.act_evt_log UNION ALL
SELECT "act_exception", COUNT(*) FROM fsl_prod.act_exception UNION ALL
SELECT "wfl_business_rule_line", COUNT(*) FROM fsl_prod.wfl_business_rule_line;

運(yùn)行結(jié)果:

詳解mysql數(shù)據(jù)庫三種快速獲得某個數(shù)據(jù)庫下的所有表的記錄數(shù)方法

 


3、存儲過程統(tǒng)計某個數(shù)據(jù)庫下的所有表的記錄數(shù)(多次復(fù)用)

3.1、創(chuàng)建中間表

CREATE TABLE table_rows (DB VARCHAR ( 20 ), TABLE_NAME VARCHAR ( 64 ), count bigint(30), last_update_date datetime ( 0 ) ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '記錄數(shù)據(jù)庫所有表的行數(shù)' ROW_FORMAT = Dynamic;

3.2、創(chuàng)建

下面的存儲過程用到了游標(biāo)(cursor),循環(huán)(loop),動態(tài)SQL預(yù)處理(prepare)等技術(shù),獲得的數(shù)據(jù)存到table_rows表。

CREATE PROCEDURE statis_rows(in v_schema varchar(50))
BEGIN 
DECLARE sql_str VARCHAR(5000);
declare no_more_departments integer DEFAULT 0;
DECLARE sql_cur CURSOR FOR (
 SELECT
 CONCAT(
 'select ',"'",table_schema,"'",",'",table_name,"',",'count(1)',' into @v_tab_schema,@v_tab_name,@v_count from ',
 TABLE_SCHEMA,
 '.',
 TABLE_NAME,
 ''
 )
 FROM
 information_schema.TABLES
 WHERE table_schema = v_schema
 and table_name <> 'table_rows'
);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_departments=1;
/* 打開游標(biāo),進(jìn)入循環(huán)統(tǒng)計各表的記錄 */
OPEN sql_cur;
myLoop:LOOP
fetch sql_cur into sql_str;
 
if no_more_departments = 1 THEN
leave myLoop;
end if;
set @v_sql=sql_str;
prepare stmt from @v_sql;
EXECUTE stmt;
 
/* 將統(tǒng)計結(jié)果保存到表中,以便隨時都可以查看 */
INSERT INTO table_rows
VALUES
 (
 @v_tab_schema,
 @v_tab_name,
 @v_count,
 sysdate()
 );
 
/* 預(yù)處理編譯 SQL是占用資源的,需使用DEALLOCATE PREPARE釋放資源 */
DEALLOCATE prepare stmt;
end loop myLoop;
 
close sql_cur;
END
詳解mysql數(shù)據(jù)庫三種快速獲得某個數(shù)據(jù)庫下的所有表的記錄數(shù)方法

 

調(diào)用存儲過程:

call statis_rows('mysql');
call statis_rows('fsl_prod');
詳解mysql數(shù)據(jù)庫三種快速獲得某個數(shù)據(jù)庫下的所有表的記錄數(shù)方法

 


詳解mysql數(shù)據(jù)庫三種快速獲得某個數(shù)據(jù)庫下的所有表的記錄數(shù)方法

 

查看表行數(shù)

select * from table_rows;
詳解mysql數(shù)據(jù)庫三種快速獲得某個數(shù)據(jù)庫下的所有表的記錄數(shù)方法

分享到:
標(biāo)簽:mysql
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定