sql数据库中,如何快速找数据量最大的几个表

sql数据库中,如何快速找数据量最大的几个表,第1张

分类: 电脑/网络 >>程序设计 >>其他编程语言

问题描述:

有两个数据库文件太大,分别超过12G 和 6G,快把分区挤满,无法进行数据备份和更新了,需要清一下表的内容。

一个数据库,有几十个表,不可能一个个地去count的,请问在查询分析器中,如何快速地找到数据量最大的几个表?

另外,如果我用truncate table命令,那么索引文件也会相应地缩小吗?

谢谢!

解析:

sql的每一个数据库中有一个名名为’sysobjects’的表,这个系统表中储存了当前数据库中所有对象(包括系统表,用户表、日志、存储过程)的信息,可以用这个表链获取数据库中表的数目和名称,之后向获得某个制定数据库的信息,可以使用带参数的 sp_helpbd过程

我想不管是什么db总是有相应的业务逻辑的,最大的那几个表,一定有她的特殊 的业务逻辑,从表名上应该能判断出来,一般存图片,歌曲或者其他资料的表象对比较大,但是存用户名 以及关联表 ,一般都不会太大,

关于数据库更新,如果是xp或者me 以上的系统看看先把系统还原暂时停止,这样可以节省出来一些空间,或者在挂一块硬盘看看

数据库中有几十上百张表,那么哪些表的数据量比较大呢,总不能一个表一个表的去查询吧,在mysql中也有类似于oracle的数据字典表,只不过mysql没有oracle记录的那么多和详细,但也足够我们查询这些信息了。

在mysql的information_schema下有存储数据库基本信息的数据字典表,可以通过查询tables表来获得所需要的表相关信息。

mysql>show databases

+--------------------+

| Database |

+--------------------+

| information_schema |

|mysql |

|report|

| report_result |

|test |

+--------------------+

5 rows in set (0.02 sec)

mysql>use information_schema

Database changed

mysql>show tables

+---------------------------------------+

|Tables_in_information_schema |

+---------------------------------------+

|CHARACTER_SETS |

|COLLATIONS |

| COLLATION_CHARACTER_SET_APPLICABILITY |

|COLUMNS |

|COLUMN_PRIVILEGES|

|KEY_COLUMN_USAGE |

|PROFILING|

|ROUTINES |

|SCHEMATA |

|SCHEMA_PRIVILEGES|

|STATISTICS |

|TABLES |

|TABLE_CONSTRAINTS|

|TABLE_PRIVILEGES |

|TRIGGERS |

|USER_PRIVILEGES |

|VIEWS|

+---------------------------------------+

17 rows in set (0.00 sec)

那么我们查看一下talbes表结构信息,看看存储的具体信息

mysql>desc tables

+-----------------+--------------+------+-----+---------+-------+

| Field |Type | Null | Key | Default |Extra |

+-----------------+--------------+------+-----+---------+-------+

| TABLE_CATALOG | varchar(512) | YES | | NULL | |

| TABLE_SCHEMA| varchar(64) | NO | || |

| TABLE_NAME | varchar(64) | NO | || |

| TABLE_TYPE | varchar(64) | NO | || |

| ENGINE |varchar(64) | YES | |NULL| |

| VERSION |bigint(21) | YES | |NULL| |

| ROW_FORMAT | varchar(10) | YES | | NULL | |

| TABLE_ROWS | bigint(21) | YES | | NULL | |

| AVG_ROW_LENGTH | bigint(21) | YES | | NULL | |

| DATA_LENGTH | bigint(21) | YES | | NULL | |

| MAX_DATA_LENGTH | bigint(21) | YES | | NULL | |

| INDEX_LENGTH| bigint(21) | YES | | NULL | |

| DATA_FREE | bigint(21) |YES | | NULL | |

| AUTO_INCREMENT | bigint(21) | YES | | NULL | |

| CREATE_TIME | datetime |YES | | NULL | |

| UPDATE_TIME | datetime |YES | | NULL | |

| CHECK_TIME | datetime |YES | | NULL | |

| TABLE_COLLATION | varchar(64) | YES | |NULL| |

| CHECKSUM| bigint(21) |YES | | NULL | |

| CREATE_OPTIONS | varchar(255) | YES | |NULL| |

| TABLE_COMMENT | varchar(80) | NO | || |

+-----------------+--------------+------+-----+---------+-------+

21 rows in set (0.00 sec)

主要存储了表的信息如表使用的引擎,表的类型等信息。我们可以通过查询table_rows属性获得哪些表数据量比较大。

mysql>select table_name,table_rows from tables order by table_rows desc limi 10

+---------------+------------+

| table_name|table_rows |

+---------------+------------+

| task6|1558845 |

| task |1554399 |

| task5|1539009 |

| task3|1532169 |

| task1|1531143 |

| task2|1531143 |

| task4|1521225 |

| task7| 980865 |

我们继续深入思考,这些存储的数据是否准确,是否真实的反应了表中数据量大小?

mysql>show create table tables \G

*************************** 1. row***************************

Table: TABLES

Create Table: CREATE TEMPORARY TABLE`TABLES` (

`TABLE_CATALOG` varchar(512) default NULL,

`TABLE_SCHEMA` varchar(64) NOT NULL default '',

`TABLE_NAME` varchar(64) NOT NULL default '',

`TABLE_TYPE` varchar(64) NOT NULL default '',

&nb


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9601210.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存