gpt4 book ai didi

sql - 在只有 2 个不同值的列上创建索引

转载 作者:行者123 更新时间:2023-12-05 07:43:10 24 4
gpt4 key购买 nike

我有一个包含数百万条记录的表。

其中一列只有 2 个值“0”和“1”。

我只关心列值为“0”的记录,并对这些记录进行一些处理。

考虑到包含值“0”的记录数大约有数百条,在该列上创建索引是否明智。

从那时起,索引将只有 2 个值“0”和“1”,分别引用数百条实际记录和“1”,引用其对应的数百万条记录。

既然我不关心“1”及其引用,我应该首先使用索引吗?

最佳答案

在工程领域,包括软件工程,您应该衡量结果,而不是猜测(或要求互联网上的人告诉您正确的做法)。

您应该使用 EXPLAIN 找出您的 SQL 数据库如何根据您搜索的值优化不同的查询。

由于包含 0 的行数与包含 1 的行数不平衡,您是对的,数据库优化搜索一个或另一个值的查询的方式可能会有很大差异。

如果您正在搜索 1,那么读取索引的开销可能是一种浪费,因为它无论如何都会访问 99% 的行。所以一个好的优化器应该跳过索引,直接读取表,丢弃少数不匹配的行。

但如果您搜索少数值 0,优化器应该能够判断使用索引将是有益的。

使用 EXPLAIN 来验证这一点。使用 EXPLAIN 尝试这两个查询(搜索 0 和搜索 1),看看优化程序的计划有何不同。

我对 EXPLAIN 的语法含糊不清,因为您决定不具体说明您使用的是哪个品牌的 SQL 数据库。您只标记了您的问题“sql”和“数据库索引”,但没有标记“sql-server”或“mysql”或“postgresql”或您正在使用的任何内容。

EXPLAIN 不是标准 SQL 语言的一部分,因此每个数据库对 EXPLAIN 的实现略有不同。具体答案将取决于您使用的 SQL 数据库。

关于sql - 在只有 2 个不同值的列上创建索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43924801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com