gpt4 book ai didi

mysql - 列索引的有效性是否与列数据的熵有关

转载 作者:行者123 更新时间:2023-11-29 04:35:40 24 4
gpt4 key购买 nike

作为关系数据库(Postgres、MySQL)的消费者,我经常需要考虑各种查询上下文中的查询速度。然而,在将数据库投入生产之前,您通常并不知道将如何使用数据库或瓶颈可能在哪里。

这让我想知道,我能否使用关于列的预测熵的经验法则作为启发式来猜测索引该列的速度增加?

通过 Google 快速查找计算机科学专业毕业生为计算机科学专业毕业生撰写的论文。对于自学成才的程序员,您能用“外行”的术语来概括吗?


熵?:我将熵定义为行数除以一个值的平均重复次数(平均值)。如果对于那些具有 CS 词汇的人来说,这是一个糟糕的选择,请提出一个更好的词。

最佳答案

这个问题真的太宽泛了,无法彻底回答,但我会尝试总结一下 PostgreSQL 的情况(我对其他 RDBMS 了解不够,但我写的一些内容将适用于大多数)。

PostgreSQL 术语不是您上面建议的,而是特定条件的选择性,它是一个介于 0 和 1 之间的数字,定义为满足条件的行数除以表中的总行数。具有低选择性值的条件(有点违反直觉)称为高选择性

判断索引是否有用的唯一可靠方法是比较使用和不使用索引的执行时间。

当 PostgreSQL 决定对表的条件使用索引是否有效时,它会将整个表的顺序扫描的估计成本与使用索引扫描的成本进行比较适用指标。

由于顺序读取和随机 I/O(用于访问索引)的速度通常不同,因此有一些参数会影响成本估算并进而影响决策:

  • seq_page_cost:顺序获取磁盘页面的成本
  • random_page_cost:非顺序获取磁盘页面的成本
  • cpu_tuple_cost:处理一个表行的成本
  • cpu_index_tuple_cost:索引扫描期间处理索引条目的成本

这些成本以虚数单位衡量,习惯上将seq_page_cost定义为1,其他相关。

数据库收集表统计信息,以便了解每个表的大小以及列值的分布情况(最常见的值及其频率、直方图、与物理位置的相关性)。

要查看 PostgreSQL 如何使用所有这些数字的示例,请查看 this example来自文档。

使用默认设置,经验法则可能是索引不会有太大帮助,除非选择性小于 0.2。

关于mysql - 列索引的有效性是否与列数据的熵有关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42758128/

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