mysql复合索引时间范围_MySQL复合索引和运算符BETWEEN

你的风格非常罕见。

大多数人可能会写WHERE began_at < NOW() AND finished_at > NOW()

然而。我建议在这两个字段上添加一个索引。

组合键不会对您有用,因为它只会加快搜索者的特定日期组合。

嗯,这并不完全正确,因为如果你使用betree,组合键会帮助你,但不会像单独索引它们一样好。

如果使用等号(=)运算符搜索字段组合,则组合键非常好。单元字段索引在ragen请求中表现更好。

你可以谷歌搜索一下“多维范围搜索”。

原因是一个字段中的所有匹配字段基本上可以在btree中的log(n)时间中找到。

因此,您的整体运行时间将为O(k * log(n)),即O(log(n))。

多维范围查询的运行时间O(sqrt(n))更高。然而,也有更好的实现,也是acheav对数运行时。

但是它们并没有在mysql中完全实现,因此根据版本的不同,它会更糟或更糟糕。

所以让我总结一下:

单个字段的等式比较:哈希索引(运行时O(1))

单个字段的范围搜索:单个字段的btree索引(O(log(n)))

多个字段的平等搜索:组合哈希键(运行时O(1))

那些案件是明确的......

多个字段的范围搜索:单独的btree索引(O(log(n)))

这是不太清楚的地方。由于上面给出的原因,对于当前版本,它明显更好地单独索引。

通过对该用例的完美实现,您可以使用组合键获得更好的性能,但是没有系统知道它支持它。

从版本5.0开始,mysql支持松散索引(你需要它),但只是非常有限,而查询优化器仅在极少数情况下才使用它们。不知道5.3等新版本。

但是,如果使用mysql实现松散索引,那么在您执行范围请求或在不同方向上排序的字段上组合键变得越来越相关。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值