gpt4 book ai didi

mysql - SET 列上的索引有用吗?

转载 作者:搜寻专家 更新时间:2023-10-30 22:31:01 27 4
gpt4 key购买 nike

以下问题特别倾向于 MySQL 和 PostgreSQL,但我也对有关其他数据库系统的答案感兴趣。

我正在设计一个数据库和 SET column在少数情况下,type 似乎符合要求。一个这样的例子可以表示为一周中每一天的 bool 列,我正在考虑使用 MySQL's SET , SET('周日','周一','周二','周三','周四','周五','周六')

是这样一个索引 SET column有用?它会加快搜索与一周中的每一天相匹配的行的速度吗?星期几的特定组合?或者它只会加快搜索字段的完整精确二进制值(例如周一/周三/周五的 0101010)?

最佳答案

使用 PostgreSQL

从逻辑上讲,如果您只想测试 =,二进制解决方案是最快的。但是,这没什么用。

如果不是,您最好将它们存储为

  1. 一个枚举数组,
  2. 就像单独的 bool 字段一样简单。您甚至可以使用 bloom 索引。

在 PostgreSQL 中,您可以创建一个枚举类型,然后拥有一个枚举类型数组。索引会加快速度。

CREATE TYPE dow AS ENUM ('M', 'Tu', 'W', 'Th', 'F', 'Sa', 'Su' );
CREATE TABLE foo ( days dow[] );

这将允许您找到所有可用的星期一

SELECT * FROM foo WHERE days @> ARRAY['M']::dow[];

或者,整个星期一、星期三和星期五

SELECT * FROM foo WHERE days @> ARRAY['M','W','F']::dow[];

或者你可以让它们成为 bool 值,索引它们,然后做

SELECT * FROM foo WHERE has_monday AND has_wednesday AND has_friday; 

关于mysql - SET 列上的索引有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43313498/

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