这个问题看起来很可笑,但我正在努力寻找可以回答这个问题的基本文档。
我正在查看一个数据表,它显然包含258706行。这就是我所得到的:
SELECT COUNT(*) FROM `my_table` 258706
当我指定一个条件时,我实际上得到了所有这些行。例如:
SELECT * FROM `my_table` WHERE `id` < 1000000 返回258706行。
但是,如果我删除WHERE条件,一些行将消失:
SELECT * FROM `my_table`仅返回249627行。
如果我查看表的结构,我会发现主键的基数只有249627。所以我猜第一个语句只保留那些具有不同id值的值,而第二个语句保留所有内容…但为什么会这样呢?
更广泛地说,一个非空主关键字的基数(根据定义应该是唯一的,对吧?)不等于行数吗?
任何帮助都将不胜感激!
编辑:这是索引(我不负责设计)
Nom de l‘’index UniqueéColonne CardinalitéInterclassement Null
主BTREE Oui非id 249627 A非
id BTREE Oui非id 249627 A非
old_eid BTREE Oui非old_eid 39011 A Oui
id_activite BTREE Oui非id_activite 185560 A Oui
id_location 157663 A用户界面
num_event 249627 A非
begin BTREE非begin 55200 A Oui
结束BTREE非结束60870 A Oui
发布于 2020-07-22 00:04:52
您没有指定您的数据库。一种可能性(相当小)是您的数据库正在做count(*)的近似值。更有可能的是,数据发生了变化--一些行被删除了。
主键的基数是表的大小。主键具有唯一的值,并且从不为NULL。这些条件由数据库强制执行。
请注意,某些操作可能使用数据库大小的近似值。因此,例如,如果您从explain计划中读取表大小,则这可能只是近似值。
https://stackoverflow.com/questions/63018460
复制相似问题