zoukankan      html  css  js  c++  java
  • mysql information_schema 常用命令

    information_schema 是MySql 信息数据库。

    其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。

    有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。

    关于information_schema 的讲解网上很多资料  也很全面   这里我们介绍下最常用的相关信息查询:

    1.SCHEMATA 

    SELECT *FROM information_schema.SCHEMATA s;   -- 数据库信息,主要了解mysql中有哪些数据库。

     2.TABLES

    SELECT *FROM information_schema.TABLES t WHERE t.TABLE_SCHEMA = '数据库名';  --数据库中表信息

     这个表能干嘛呢?简洁:表明,表中行数,表存数据大小。

    SELECT TABLE_NAME ,TABLE_ROWS ,DATA_LENGTH+INDEX_LENGTH ,concat(round((DATA_LENGTH+INDEX_LENGTH)/1024/1024,2), 'MB') as data
    FROM information_schema.tables WHERE TABLE_SCHEMA='库名' ORDER BY DATA_LENGTH+INDEX_LENGTH desc; 

     3.STATISTICS  提供了关于表索引的信息。是show index from schemaname.tablename的结果取之此表

     SELECT s.INDEX_NAME,s.COLUMN_NAME,s.INDEX_TYPE,s.CARDINALITY FROM information_schema.STATISTICS s WHERE s.TABLE_NAME = '表名' AND s.TABLE_SCHEMA = '库名';

    关键在于这列:CARDINALITY  这个干嘛用的呢?

    表示所以中不重复记录的预估值,需要注意的是Cardinality是一个预估值,而不是一个准确值基本上用户也不可能得到一个准确的值,在实际应用中,Cardinality/n_row_in_table应尽可能的接近1,如果非常小,那用户需要考虑是否还有必要创建这个索引。故在访问高选择性属性的字段并从表中取出很少一部分数据时,对于字段添加B+树索引是非常有必要的。

    建立索引的前提是高选择性。这对数据库来说才具有实际意义,那么数据库是怎样统计Cardinality的信息呢?因为MySQL数据库中有各种不同的存储引擎,而每种存储引擎对于B+树索引的实现又各不相同。所以对Cardinality统计时放在存储引擎层进行的

    在生成环境中,索引的更新操作可能非常频繁。如果每次索引在发生操作时就对其进行Cardinality统计,那么将会对数据库带来很大的负担。另外需要考虑的是,如果一张表的数据非常大,如一张表有50G的数据,那么统计一次Cardinality信息所需要的时间可能非常长。这样的环境下,是不能接受的。因此,数据库对于Cardinality信息的统计都是通过采样的方法完成

    索引的建立对数据库的影响非常之大,不信你可以跑个千万级的数据表试试,一个索引,2,3,4 相差的不是一点点  简直是指数倍的增长,合理的使用索引可以提高性能,滥用就是降低性能的表现。

  • 相关阅读:
    支持向量机SVM知识点概括
    决策树知识点概括
    HDU 3081 Marriage Match II
    HDU 3572 Task Schedule
    HDU 4888 Redraw Beautiful Drawings
    Poj 2728 Desert King
    HDU 3926 Hand in Hand
    HDU 1598 find the most comfortable road
    HDU 4393 Throw nails
    POJ 1486 Sorting Slides
  • 原文地址:https://www.cnblogs.com/wfpanskxin/p/12841355.html
Copyright © 2011-2022 走看看