这可能是一个非常愚蠢的问题,但索引数据库表中的布尔型字段会有多大好处吗?给定一种常见的情况,如“软删除”被标记为非活动状态的记录,因此大多数查询包括WHERE deleted = 0
,它是否有助于让该字段自行索引,还是应该与其他常用的索引组合使用搜索不同索引的字段?索引布尔字段
索引布尔字段
回答
编号
您可以搜索具有高选择性/基数的字段。几乎任何表格中都会删除一个布尔字段的基数。如果有的话,它会让你的写入变慢(通过一个很小的数量)。
也许你会使它成为聚集索引中的第一个字段,如果每个查询考虑到软删除?
想象一个拥有数千页的大书。页面包含单个字母,'A'或'B'和一个随机数字。如果您在A和B页面没有混合但书本从A页面开始,然后是B开始的情况下找到某个您知道它位于“A”页面之一的随机数字条目,您是否有好处?是的,你会..所以我猜你错了.. – tObi 2016-09-25 12:29:43
我认为这会有所帮助,特别是在涵盖指数方面。
多少/少数当然依赖于您的数据和查询。
你可以有各种关于索引的理论,但最终答案是由数据库中的数据库引擎提供的真实数据。通常你会对答案感到惊讶(或者我的理论太糟糕了)
检查查询的查询计划并确定查询是否可以改进,或者索引是否可以改进。 这很简单,改变指标,看看它有什么区别
+1:我没有看到在索引列中造成的危害 – 2009-12-04 05:29:18
@OMGPonies危害在于额外的写入开销,在拥有大量行的繁忙表上,这实际上可以降低查询性能。只有高基数和查询才能充分利用,这只是一个好处。 – oucil 2013-12-10 20:14:15
我认为这将有助于如果你使用的是一个视图(其中删除= 0),你经常从这个视图查询。
我认为如果你的布尔型字段在很多情况下会引用它们,那么有一个单独的表,例如DeletedPages或SpecialPages,它会有许多布尔类型字段,比如is_deleted
, is_hidden
,is_really_deleted
,requires_higher_user
等等,然后你就可以加入它们。
通常情况下,这个表的大小会更小,并且通过接受连接会获得一些优势,特别是就代码可读性和可维护性而言。而对于这种类型的查询:
select all pages where is_deleted = 1
这将是更快的把它实现的是这样的:
select all pages where pages
inner join DeletedPages on page.id=deleted_pages.page_id
我想我的地方阅读有关您需要的字段在MySQL数据库至少有3的基数使该领域的索引工作,但请确认这一点。
很难说布尔值是如此薄,我们没有任何数据,但是会产生连接,每个查询的工作流程都会使查询变慢,而不是更快,特别是如果主键的集群不同,每个查询都需要deleted_pages表。 – 2009-12-04 05:51:17
什么是deleted_at DATETIME列?有两个好处。
- 如果你需要一个像名称的唯一列,您可以创建和软删除具有相同名称多次记录(如果您使用deleted_at列和名称的唯一索引)
- 您可以搜索为最近删除的记录。
您查询看起来是这样的:
SELECT * FROM xyz WHERE deleted_at IS NULL
如果您使用的是支持位图索引(如Oracle)数据库,然后在布尔列这样的索引将有用得多比没有。
- 1. 在布尔字段中添加索引
- 2. MySQL:两个布尔字段的索引
- 3. 布尔检索,索引阶段
- 4. TensorFlow布尔索引
- 5. symfony3:query_builder按布尔型字段搜索
- 6. 在elasticsearch中是否需要布尔型字段索引
- 7. 由布尔字段
- 8. IndexingError使用布尔索引
- 9. 熊猫布尔索引
- 10. Numpy教程 - 布尔索引
- 11. numpy布尔索引混淆
- 12. 在xarray布尔索引
- 13. 在sphinx中将一个布尔型字段索引为一个字符串
- 14. Rails中的布尔字段
- 15. Kotlin,JPA和布尔字段
- 16. 查询空布尔字段
- 17. 命名布尔字段
- 18. ZF2 + DoctrineORMModule +布尔字段
- 19. 问题布尔字段
- 20. 索引大量字段与索尔单位
- 21. 按索引排序方面字段不计在索尔
- 22. 太阳黑子/索尔:索引时间字段结果NumberFormatException
- 23. 使用布尔值(true)作为唯一索引字段在Oracle中创建表
- 24. solrnet查询获取布尔类型字段的过滤器索引到solr
- 25. MultiIndex df(熊猫)布尔索引
- 26. 如何索引宽泛的布尔表
- 27. numpy数组索引布尔值
- 28. 熊猫多指数布尔索引
- 29. 获取索引的布尔向量
- 30. 试图理解布尔数组索引
可能重复[索引布尔型字段是否有任何性能增益?](http://stackoverflow.com/questions/10524651/is-there-any-performance-gain-in-indexing-a-boolean-字段) – 2016-04-13 12:14:04
@AmirAliAkbari:哦!没有!循环参考!希望S.O.不会爆炸! – Paul 2017-02-01 14:49:49