首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么一个简单的"SELECT FROM _“实际上比"SELECT FROM _ WHERE _”找到的行数要少?

为什么一个简单的"SELECT FROM _“实际上比"SELECT FROM _ WHERE _”找到的行数要少?
EN

Stack Overflow用户
提问于 2020-07-22 00:02:33
回答 1查看 25关注 0票数 0

这个问题看起来很可笑,但我正在努力寻找可以回答这个问题的基本文档。

我正在查看一个数据表,它显然包含258706行。这就是我所得到的:

代码语言:javascript
复制
SELECT COUNT(*) FROM `my_table` 

258706

当我指定一个条件时,我实际上得到了所有这些行。例如:

代码语言:javascript
复制
SELECT * FROM `my_table` WHERE `id` < 1000000 

返回258706行。

但是,如果我删除WHERE条件,一些行将消失:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-22 00:04:52

您没有指定您的数据库。一种可能性(相当小)是您的数据库正在做count(*)的近似值。更有可能的是,数据发生了变化--一些行被删除了。

主键的基数是表的大小。主键具有唯一的值,并且从不为NULL。这些条件由数据库强制执行。

请注意,某些操作可能使用数据库大小的近似值。因此,例如,如果您从explain计划中读取表大小,则这可能只是近似值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63018460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档