精华内容
下载资源
问答
  • A source of confusion may be the use of the word in two different contexts - data modelling and database query optimization.In data modelling terms, cardinality is how one table relates to another.1-1...

    A source of confusion may be the use of the word in two different contexts - data modelling and database query optimization.

    In data modelling terms, cardinality is how one table relates to another.

    1-1 (one row in table A relates to one row in tableB)

    1-Many (one row in table A relates to many rows in tableB)

    Many-Many (Many rows in table A relate to many rows in tableB)

    There are also optional participation conditions to the above (where a row in one table doesn't have to relate to the other table at all).

    When talking about database query optimization, cardinality refers to the data in a column of a table, specifically how many unique values are in it. This statistic helps with planning queries and optimizing the execution plans.

    展开全文
  • 二、数据库中实体通过关系来实现关联。 三、度数:关系中实体类的数目称为关系的度数,比如二元关系中的三种类型:一对一(1:1)关系,一对多(1:N)关系,多对多(N:M)关系。1:1关系中,某种类型的一个实体...

    基数和度数的区别:

    一、基数与度数不是一个概念。
    二、数据库中实体通过关系来实现关联。
    三、度数:关系中实体类的数目称为关系的度数,比如二元关系中的三种类型:一对一(1:1)关系,一对多(1:N)关系,多对多(N:M)关系。1:1关系中,某种类型的一个实体实例仅和另一种类型的一个实体实例相关联。
    四、基数:上述3种关系通过基数来命名和分类。基数表示计数。有最大基数,或最小基数之分。



    最大基数:某关系一侧可以出现的最大实体实例数,这个数字被称作关系的最大基数,是可能参与关系实例的最大实体实例数。比如,篮球队-队员之间的关系是1:5,表明每个球队最多有5名球员,5就是这个关系中队员的最大基数。


    最小基数:表示必须参与关系实例的最小 实体实例数。如果最小基数为0,则关系中的实体参与是可选的。如果最小基数为1,则关系中的实体参与是强制性的。

    每当一种实体类型的属性引用另一种实体类型时,它们之间就存在某种关系。ER 模型中的关系使用菱形框表示。因此,关系是连接多个实体的一种方式。根据 Relation/table 透视图或常见的二元三种关系模型,可以表示为 m:n   (m,n>=1)

    映射基数是实体可以参与的最大关系实例数。

    例子:一个售货员(salesperson)可以将多种商品(goods)售给一个顾客(customer),而一个售货员也可以将一种商品售给多个顾客;一个顾客的一种商品可以由多个售货员经售。售货员、商品和顾客三个实体集之间的联系是多对多的三元联系。元代表的是实体.三元联系就是三个实体之间的关系。


    关系模型的理解,今天做期末发现自己对关系模型有一个模糊理解:

    多对一:

     信用卡和用户是N...1的关系,类似函数中X到Y的映射,定义域A、值域B和对应法则F分别代表的是实体1,联系,实体2。

    多对多:

     

    为了更复杂的表示,我们在直线上用A..B来映射。A表示至少,B表示至多。*表示任意.
    如导师和指导之间是1..*,即一个导师最少指导一个学生,没有上限。
    学生和指导之间是 1..1,即一个学生至少被一个导师指导,也最多一个。就是一个学生必须有一个导师。

    展开全文
  • 大白话讲:基数指的就是MySQL中某一列的不同值的数量。如果这一列是唯一索引,那基数 == 行数。如果这一列是sex,枚举类型只有男女,那它是基数就是2。Cardinality越高,列就越有成为索引的价值。MySQL执行计划也...

    1基数是啥?

    大白话讲:基数指的就是MySQL表中某一列的不同值的数量。

    如果这一列是唯一索引,那基数 == 行数。

    如果这一列是sex,枚举类型只有男女,那它是基数就是2。Cardinality越高,列就越有成为索引的价值。MySQL执行计划也会基于Cardinality选择索引。通过下面的方式可以看到表中各列的基数。

    ef198f798184ff249c49d3d8989add17.png比如这个经典的例子:有一列为sex,那对于sex列中存储的值来说 非男即女,它的基数最大就是2。

    那也就完全没有必要为sex建立索引。因为,为了提升你基于sex的查询速度,MySQL会为你选择的这个新索引创建一棵全新的B+Tree。但你sex只有两种值,对于MySQL来说,即使它为你指定的列建立了B+Tree索引,真正执行查询时,最多进行一次二分查询,剩下的操作只能是遍历,所以为sex创建索引意义不大。

    2InnoDB更新基数的时机?

    参数:innodb_stats_auto_recalc控制MySQL是否主动重新计算这些持久性的信息。默认为1表示true、0表示false。默认情况下当表中的行变化超过10%时,重新计算基数信息。

    3基数是估算出来的!

    基数并不会实时更新!而且它是通过采样估算出来的值!至于基数的公式是怎样的,可能并不重要。重要的是你得知道,它是通过随机采样数据页的方式统计出来的一个估算值。而且随机采样的页数可以通过参数:

    innodb_stats_persistent_sample_pages设置,默认值是20。

    这就意味着 基数值并不准确,甚至你每次计算的结果相差还是蛮大的。

    4基数的持久化机制

    可以通过参数innodb_stats_persistent控制是否持久化基数,默认为off。

    当然你可以为一个单独的表设置 STATS_PERSISTENT=1那么它的

    innodb_stats_persistent将自动被启用。

    开启它的好处是:重启MySQL不会再重复计算这个值,加快重启速度。

    5如何主动的更新基数?

    执行下面的SQL时都会触发InnoDB更新基数(即使你并没有意识到它会更新基数)。所以尽量选择一个业务低峰期。analyze table tableName;

    e08b908bba2b1475e1088b2e42de0bc2.png

    如果因为采样的数量太少了,计算的基数就错的离谱。那很可能会导致MySQL的优化器选错索引。这时你可以将这个值适当调大。但是增加太多可能会导致ANALYZE TABLE运行缓慢。

    反之,ANALYZE TABLE运行太慢。你可以适度调整参数innodb_stats_persistent_sample_pages的值。但是这又可能导致基数计算的不准确。

    展开全文
  • 我需要在(列)中添加索引,并在这篇文章中偶然发现:多少数据库索引太多?引用:话虽如此,您显然可以向添加很多毫无意义的索引,这些索引什么也做不了。将B-Tree索引添加到具有2个不同值的列中将毫无意义,因为...

    我需要在表(列)中添加索引,并在这篇文章中偶然发现:

    多少数据库索引太多?

    引用:

    话虽如此,您显然可以向表添加很多毫无意义的索引,这些索引什么也做不了。将B-Tree索引添加到具有2个不同值的列中将毫无意义,因为它在查找数据方面不会增加任何内容。列中的值越独特,则从索引中受益越多。"

    如果只有两个不同的值,索引真的没有意义吗?给定如下表(MySQL数据库,InnoDB)

    进一步的条件:

    该数据库包含3亿条记录

    状态只能是"启用"和"禁用"

    1.5亿条记录的状态为=启用,1.5亿条记录的状态为

    stauts =禁用

    我的理解是,如果没有状态索引,使用where status=’enabled’进行选择会导致进行3亿条记录的全表扫描吗?

    在状态上使用BTREE索引时查询的效率如何?

    我应该索引此列吗?

    MySQL InnoDB提供什么替代方法(可能是其他索引),以给定示例中的"基数/选择性非常低"的方式通过" where status =" enabled"子句有效地查找记录?

    您描述的索引几乎没有意义。如果您需要选择的行数少于总行数,则最好使用索引。

    这样做的原因与数据库访问表的方式有关。可以通过全表扫描评估表,在该表中依次读取和处理每个块。或通过rowid或键查找,其中数据库具有键/行并读取所需的确切行。

    如果您使用基于主键或另一个唯一索引的where子句,例如where id = 1,数据库可以使用索引来获取对行数据存储位置的精确引用。这显然比进行全表扫描和处理每个块更有效。

    现在回到您的示例,您有一个where status = 'enabled'的where子句,索引将返回1.5亿行,数据库将不得不使用单独的小读取依次读取每一行。而通过全表扫描访问表允许数据库利用更有效的较大读取。

    最好只进行全表扫描而不是使用索引。使用mysql,您可以将FORCE INDEX (idx_name)用作查询的一部分,以允许在每个表访问方法之间进行比较。

    参考:

    http://dev.mysql.com/doc/refman/5.5/zh-CN/how-to-avoid-table-scan.html

    我明白您的意思,但通常会有其他限制因素。例如,假设他增加限制10,那么索引更好,不是吗?我想按要求,你是对的

    很抱歉,我不同意Mike。添加索引的目的是限制对MySQL的完整记录搜索的数量,从而限制通常是瓶颈的IO。

    此索引不是免费的;您需要在插入/更新时为其付费,因为索引现在需要加载索引文件(300M条记录的全文本索引可能不在内存中),因此必须在索引需要更新时以及在搜索本身中进行支付。因此很可能是您获得了更多的IO,而不是限制了它。

    我确实同意这样一种说法,即最好将二进制变量存储为bool或tinyint,因为这会减小行的长度,从而限制磁盘IO,并且数字比较也更快。

    如果需要速度,并且很少使用禁用的记录,则可能希望有2个表,一个用于启用记录,一个用于禁用记录,并在状态更改时移动记录。随着复杂性和风险的增加,这当然是我的最后选择。如果您碰巧要去,一定要进行一笔交易。

    它只是突然出现在您的脑海中,您可以使用explain语句检查是否实际使用了索引。那应该向您展示MySQL如何优化查询。我真的不知道hoe MySQL是否可以优化查询,但是从postgresql中,我确实知道您应该在数据库上解释与真实数据库大致相同(大小和数据)的查询。因此,如果您在数据库上有一个副本,请在表上创建一个索引,然后查看它是否已实际使用。正如我说的那样,我对此表示怀疑,但我绝对不了解所有内容:)

    +1建议使用分区表或2个单独的表。

    这是一个很好的讨论。我同意分区,但前提是他不管状态如何都不想记录。如果每个查询都涉及一个状态,那么对我来说分区很有意义。

    而且,在我看来,插入的代价被选择的提升所抵消。如果状态变为tinyint,并且您具有经过适当调优的mysql服务器,则经过一段预热时间后,300M记录的索引文件很容易放入密钥缓冲区。

    我看到,当仅在状态=禁用的情况下,索引会更糟。谢谢!

    非常感谢您的回答!

    如果数据以50:50的比例分布,则查询status="enabled"的位置将避免对表进行一半的扫描。

    在此类表上建立索引完全取决于数据的分布,即:是否启用了状态的条目为90%,其他为10%。对于status="disabled"的查询,它仅扫描表的10%。

    因此在此类列上建立索引取决于数据的分布。

    您几乎不需要一次获得全部1.5亿条记录,因此我想"状态"将始终与其他列结合使用。也许使用诸如(状态,全名)的复合索引会更有意义

    这个答案没有解决所问的问题。如果他添加了该索引,现在他只想按姓氏进行搜索,那就是表扫描。另外,如果要最后禁用十条记录怎么办?按照要求,他希望"状态已禁用"。将全名添加到索引可能是不必要的开销。

    但是只有当您不使用where fullname like %something%作为索引时,它才像双面通配符一样没有用。

    不,如果状态在索引中排在首位,则您的全名没有索引。列的顺序很重要。

    Jan,您绝对应该为该列编制索引。我不确定引语的上下文,但是您上面所说的一切都是正确的。在该列上没有索引,最肯定的是您要对300M行进行表扫描,这对于该数据可能是最糟糕的事情。 strike>

    Jan,正如所问的那样,您的查询仅涉及" where status = enabled",而没有其他限制因素,因此该列上的索引显然无济于事(高兴的SO社区向我展示了最新情况)。但是,如果存在限制因素,例如"限制10",则索引可能会有所帮助。另外,请记住,索引也按优化分组使用和按顺序使用。如果您正在执行"按状态从表组中选择count(*),status",则索引将很有帮助。

    您还应该考虑将状态转换为tinyint,其中0表示禁用,而1表示启用。您浪费了大量的空间来存储该字符串,而tinyint仅需要每行1个字节!

    嗯,为什么要投票?我错了吗?如果是这样,我很想知道为什么,因为那意味着我已经错过了有关MySql和索引的基本知识。

    @stereofrog:你确定吗?索引存储在密钥缓冲区中,而不存储数据的事实呢?另外,我不确定"来回跳跃"是什么意思。

    您好迈克,非常感谢您的回答,这对我很有帮助。

    @a的答案是正确的,但是需要指出的是,索引的有用性不仅取决于其基数,还取决于数据的分布以及在数据库上运行的查询。

    在OP的情况下,对于具有status='enabled'的150M条记录和具有status='disabled'的150M条记录,索引是不必要的,并且浪费资源。

    对于具有status='enabled'的299M条记录和具有status='disabled'的1M条记录,该索引在类型SELECT ... where status='disabled'的查询中很有用(并将使用)。

    类型为SELECT ... where status='enabled'的查询仍将与全表扫描一起运行。

    我的MySQL数据库中有一个类似的专栏。大约400万行,分布分别为90%1和10%0。

    我今天才发现,没有索引,我的查询(where column = 1)实际上运行得明显更快。

    我愚蠢地删除了索引。我愚蠢地说,因为我现在怀疑查询(where column = 0)可能仍然从中受益。因此,我应该明确地告诉MySQL在搜索1时忽略索引,而在搜索0时使用索引。也许。

    展开全文
  • 这篇文章主要介绍了Mysql数据库表定期备份的实现详解的相关资料,需要的朋友可以参考下Mysql数据库表定期备份的实现0.背景实际开发环境中,前端程序需要在给定时间段内,将数据更新/插入到MySQL指定的库中。随着...
  • A source of confusion may be the use of the word in two different contexts - data modelling and database query optimization.In data modelling terms, cardinality is how one table relates to another.1-1...
  • 可以查询数据库中的有哪些有哪些字段,字段的属性等等。MetaData中通过一系列getXXX函数,将这些信息存放到ResultSet里面,然后返回给用户。关于MetaData的说明网上也有不少,这里我只是从我自身学习的角度来...
  • 数据库

    2021-03-12 10:45:54
    Android平台进行数据存储的五大方式,分别如下:1 使用SharedPreferences存储数据2 文件存储数据3 SQLite数据库存储数据4 使用ContentProvider存储数据5 网络存储数据下面详细讲解这五种方式的特点第一种: 使用...
  • 在MySQL中,基数一词是指可以放入列中的数据值的唯一性。它是一种属性,会影响搜索,聚类和排序数据的能力。基数可以分为以下两种类型-低基数-列的所有值必须相同。高基数-列的所有值必须唯一。如果我们在列上施加...
  • Part 1 高基数Cardinality问题 (时间线膨胀) 时序数据库主要存储的是 metric 数据,每一条数据称为一个样本(sample),样本由以下三部分组成: 指标(时间线 time-series):metric name 和描述当前样本特征的 ...
  • MySQL 哈希索引又基于哈希(散列表)来实现,所以了解什么是哈希对 MySQL 哈希索引的理解至关重要。接下来,我们来一步一部介绍哈希。1. 数组数组是最常用的数据结构,是一种线性表的顺序存储方式,由下标(也叫...
  • mysql版本大于5.0时,有个默认数据库information_schema,里面存放着所有数据库的信息(比如表名、 列名、对应权限等),通过这个数据库,我们就可以跨库查询,爆爆列。列名数据类型描述TABLE_CATALOGnvarchar...
  • 关系数据库基本概念

    2021-03-19 15:27:33
    #关系数据库基本概念 ##关系数据结构及形式化定义 关系数据库系统定义:关系数据库系统是支持关系模型的数据库系统 数据模型三要素:数据结构、数据操作、数据完整性 关系模型三要素:关系数据结构、关系操作、关系...
  • Mysql数据库表定期备份的实现0.背景实际开发环境中,前端程序需要在给定时间段内,将数据更新/插入到MySQL指定的库中。随着数据量的增多,基础库表基数的增长,每更新一次都会有5s左右的卡顿。改进方案一:批量...
  • 关系数据库

    2021-10-08 10:25:26
    基数:一个域允许的不同取值个数称为这个域的基数。 笛卡尔积 可以看成是关系的域,是域上的一种集合运算。 给定一组域D1,D2……,允许其中某些域是有相同的。这组域的笛卡尔积为: D1 * D2 * …… * Dn = {(d1,d2...
  • 数据库设计文档规范

    2021-02-23 11:42:10
    文章目录数据库设计文档规范一、命名规范1、总命名规范2、表名3、字段名4、主键名5、外键名6、普通索引7、主键索引8、唯一索引9、外键索引二、设计规范三、字段设计规范四、索引规范五、其他SQL规约ORM规约 ...
  • 数据库实现原理

    2021-08-16 19:58:53
    /** * 最简单的数据库 */ public class SimplestDB { // 数据库文件名 private static final String DB_FILE_NAME = "./db/db.dat"; public static void main(String[] args) throws ParseException, IOException {...
  • 关系数据库 关系数据库系统是支持关系模型的数据库系统 关系模型的组成 - 数据模型通常由数据结构、数据操作和完整性约束三个要素组成 - 关系数据结构、关系操作集合、关系完整性约束 关系数据库是以集合论中关系的...
  • 这个注释主要用于对应数据库表的实体类中的主键属性。 写法:@TableId(value=“数据库主键字段”,type = IdType.六种类型之一) 例如:@TableId(value=“user_id”,type = IdType.AUTO ) 1、注解中type的值的含义 ...
  • 本文实例讲述了mysql索引基数概念与用法。...索引的基数相对于数据行数较高(也就是说,列中包含很多不同的值,重复的值很少)的时候,它的工作效果最好。如果某数据列含有很多不同的年龄,索引会很快地分辨数...
  • 可以查询数据库中的有哪些有哪些字段,字段的属性等等。MetaData中通过一系列getXXX函数,将这些信息存放到ResultSet里面,然后返回给用户。关于MetaData的说明网上也有不少,这里我只是从我自身学习的角度来...
  • 举例子:一个user 有user_id自增主键,还有create_time用户创建时间业务需求 让你统计每天用户的总量和相比前一天增加了多少用户量如图表二这种。首先将每天的总量查出来 中的时间一般为date_time类型 所以用个...
  • windows SQL Server数据库创建 请在SQL Server数据库使用sql语句创建一个有趣的,如下图: 推荐步骤: 1.设计结构。数据类型分别是:编号 int identity(1,1) ,姓名 varchar(10),身份证号 varchar(20) ...
  • 用实体关系图进行数据库建模(ccidnet阿良@仙人掌工作室 2001年08月14日)一、概述很可能你现在正在规划一个数据库驱动的网站;而且几乎可以肯定的是,你一定已经浏览过数据库驱动的网站。过去,一些网站依赖CGI脚本...
  • 完整性约束用于增强数据的完整性,Oracle提供了5种完整性约束:CheckNOT NULLUniquePrimaryForeign key完整性约束是一种规则,不占用任何数据库空间。完整性约束存在数据字典中,在执行SQL或PL/SQL期间使用。用户...
  • 我正在尝试学习mySQL数据库,并开始看看WordPress后面的数据库。我正在使用Wordpress Data Base Descrition来检查结构,我遇到以下情况:|Table: wp_commentmeta|-------------------------------------------------...
  • Output:- 1 3 5 Even number of records: select * from emp where (rowid,0) in (select rowid, mod(rownum,2) from emp) Output:- 2 4 6 分享到: 2011-02-26 18:05 浏览 2253 分类:数据库 评论

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,627
精华内容 15,450
关键字:

数据库表的基数