Sql 在超过2亿行的表中搜索记录

Sql 在超过2亿行的表中搜索记录,sql,Sql,表上应该使用哪种类型的索引?它最初(每月一个)插入到一个空表中。然后在其中两列上放置一个非聚集复合索引。想知道将两个字段合并为一个字段是否会提高搜索时的性能。还是没关系?我应该使用具有主键聚集索引的标识列吗?当人们查询表时,应该为where子句中最可能使用的字段编制索引。不要担心主键-它已经有一个索引。如果您可以定义一个在查询表时可以使用的唯一主键,它将被用作聚集索引,并且对于selects来说是最快的 如果select查询必须使用您提到的两个字段,请将它们分开。性能不会受到影响,架构也不会损坏

表上应该使用哪种类型的索引?它最初(每月一个)插入到一个空表中。然后在其中两列上放置一个非聚集复合索引。想知道将两个字段合并为一个字段是否会提高搜索时的性能。还是没关系?我应该使用具有主键聚集索引的标识列吗?

当人们查询表时,应该为where子句中最可能使用的字段编制索引。不要担心主键-它已经有一个索引。

如果您可以定义一个在查询表时可以使用的唯一主键,它将被用作聚集索引,并且对于selects来说是最快的

如果select查询必须使用您提到的两个字段,请将它们分开。性能不会受到影响,架构也不会损坏。

聚集索引对经常搜索值范围的列特别有效。使用聚集索引找到具有第一个值的行后,具有后续索引值的行保证在物理上相邻

考虑到这一点,在主键(ID)上使用聚集索引可能不会带来太多好处,除非它对您的应用有商业意义。如果您有一个通常要查询的日期值,那么向该值添加聚集索引可能更有意义

select * from table where created > '2013-01-01' and created < '2013-02-01'
从创建了“2013-01-01”和“2013-02-01”的表格中选择*
我见过数据仓库使用连接键的方法。这是否适用于您取决于您的查询。显然,查询单个字段值要比查询多个字段快,尤其是在B树索引中查找次数少的情况下

或者,如果一个表中有2亿行,您可以考虑将数据拆分为多个表,如果这样做有意义的话

你是说你每个月都要加载这些数据,所以我必须假设所有数据都是相关的。如果表中有被视为“旧”且与搜索无关的数据,则可以将数据移出存档表(使用相同的架构),以便查询仅针对“当前”数据运行

否则,您可以查看NoSQL(如MongoDB)使用的切分方法。如果MongoDB不是一个选项,那么您可以在应用程序中实现相同的切分键逻辑。我怀疑您的数据库SQL驱动程序是否支持本地切分