如何获取到mysql的某个数据库数据的大小和索引的大小是多少M

如何获取到mysql的某个数据库数据的大小和索引的大小是多少M,第1张

mysql>use 数据库名;

mysql>show table status;

第一条SQL语句是选择库,这个不用说了。

第二条SQL语句show table status是获得库里面所有表的情况,其中包括了表面,数据数目,数据大小,索引大小

你自己加起来就是整个库的数据大小,和索引大小了。

很简单吧~ 希望能帮助到你。

在PHPMYADMIN里面试试就知道效果了。

如果有不明白,请发消息给我。

主键索引(PRIMARY KEY)

全文索引(FULL TEXT)

常规索引 (INDEX)

唯一索引(UNIQUE KEY)

主键索引和唯一索引的区别

     一个表中可以有多个唯一索引,但是只能有一个自增的主键

     主键索引一定是唯一索引,唯一索引不一定是主键索引,

     主键索引不能为空, 唯一索引可以为空,空值不受唯一约束,也就是说可以有多个空值

BTREE   RTRE  HASH  FULLTEXT

       通常大家都会根据查询的WHERE条件来创建合适的索引,不过这只是索引优化的一个方面。设计优秀的索引应该考虑到整个查询,而不单单是WHERE条件部分。索引确实是一种查找数据的高效方式,但是MySQL也可以使用索引来直接获取列的数据,这样就不再需要读取数据行。如果索引的叶子节点中已经包含要查询的数据,那么还有什么必要再回到表中查询呢? 如果一个索引覆盖所有需要查询的字段的值,我们就称之为“覆盖索引”。

覆盖索引是非常有用的工具,能够极大地提高性能:

       在所有这些场景中,在索引中满足查询的成本一般比查询行要小得多。

       不是所有类型的索引都可以成为覆盖索引。覆盖索引必须要存储索引列的值,而哈希索引、空间索引和全文索引都不存储索引列的值,所以MySQL只能使用B+Tree索引所覆盖索引。另外,不同的存储引擎实现覆盖索引的方式也不同,而且不是所有的引擎都支持覆盖索引。

       当发起一个呗索引覆盖的查询是,在EXPLAIN的Extra列可以看到“Using index”的信息。

如: explain select col1 from layout_test where col2=99

       索引覆盖查询还有很多陷阱可能会导致无法实现优化。MySQL查询优化器会在执行查询前判断是否有一个索引能进行覆盖。假设索引覆盖了wehre条件中的字段,但不是整个查询涉及的字段。mysql55和更早的版本也总是会回表获取数据行,尽管并不需要这一行且最终会被过滤掉。

如: EXPLAIN select from people where last_name='Allen' and first_name like '%Kim%'

这里索引无法覆盖该查询,有两个原因:

这条语句只检索1行,而之前的 like '%Kim%'要检索3行。

也有办法解决上面所说的两个问题,需要重写查询并巧妙设计索引。

       这种方式叫做延迟关联,因为延迟了对列的访问。在查询第一个阶段MySQL可以使用覆盖索引,因为索引包含了主键id的值,不需要做二次查找。

       在FROM子句的子查询中找到匹配的id,然后根据这些id值在外层查询匹配获取需要的所有列值。虽然无法使用索引覆盖整个查询,但总算比完全无法利用索引覆盖的好吧。

数据量大了怎么办?

       这样优化的效果取决于WHERE条件匹配返回的行数。假设这个people表有100万行,我们看一下上面两个查询在三个不同的数据集上的表现,每个数据集都包含100万行。

实例1中 ,查询返回了一个很大的结果集,因此看不到优化的效果。大部分时间都花在读取和发送数据上了。

实例2中 ,经过索引过滤,尤其是第二个条件过滤后只返回了很少的结果集,优化的效果非常明显:在这个数据及上性能提高了很多,优化后的查询效率主要得益于只需读取40行完整数据行,而不是原查询中需要的30000行。

实例3中 ,子查询效率反而下降。因为索引过滤时符合第一个条件的结果集已经很小了,所以子查询带来的成本反而比从表中直接提取完整行更高。

       在大多数存储引擎中,覆盖索引只能覆盖那些只访问索引中部分列的查询。不过,可以更进一步优化InnoDB。回想一下,InnoDB的二级索引的叶子节点都包含了主键的值,这意味着InnoDB的二级索引可以有效地利用这些额外的主键列来覆盖查询。

       例如,people表中last_name字段有一个二级索引,虽然该索引的列不包括主键id,但也能够用于对id做覆盖查询:

select id,last_name from people where last_name='hua'

方法:

查看数据库表的创建时间可以在information_schema中查看

information_schema数据库表说明:

schemata表:提供了当前mysql实例中所有数据库的信息。是show

databases的结果取之此表。

tables表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show

tables

from

schemaname的结果取之此表。

数据库表的创建时间在tables表中的create_time字段

select create_time from tables where table_schema='数据库名' and table_name='表名';

将上面的数据库名以及表名替换为所要查询的数据即可。

以上就是关于如何获取到mysql的某个数据库数据的大小和索引的大小是多少M全部的内容,包括:如何获取到mysql的某个数据库数据的大小和索引的大小是多少M、mysql索引类型和索引方式、「Mysql索引原理(七)」覆盖索引等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9673294.html

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

发表评论

登录后才能评论

评论列表(0条)

保存