如何查询包含300列和超过2亿条记录的表?

时间:2018-01-21 03:29:21

标签: sql sql-server

我有一个包含300多列并且没有索引的表但是,我需要使用另一个表的地址哈希值,它实际上是名字,姓氏和地址信息的组合,用于查找信息。大桌子。

我该怎么做才能加快速度?大表没有地址哈希值列。

我在想使用“搜索引擎”,但这是我不熟悉的。有什么方法我仍然可以使用SQL Server将数据附加到也有超过1400万的小表。

2 个答案:

答案 0 :(得分:0)

使用表格字段的索引来快速获取数据。

SQL - Indexes

Optimizing queries for 25+ million rows

Dynamically Query 100 Million Row Table-Efficiently

更多......

查询的速度取决于行数,但是如果您采取适当的优化来考虑性能因素,例如:

  • 索引群集/非群集
  • 数据缓存
  • 表格分区
  • 执行计划缓存
  • 数据分发

答案 1 :(得分:0)

300列是确定无法或无法正常化的标志。如果数据被正确规范化,关系数据库只能有性能查询,至少是第三范式(3NF),再加上合适的索引(根据场景,聚簇和非聚簇)。

否则你将不得不诉诸黑客以获得任何体面的表现,特别是如果表中有2亿条记录。黑客将是一个新的搜索表,它将大表中的主键与基于多个列的哈希值列链接(在您的情况下,名字和姓氏和地址)。此搜索表将具有基于哈希列的聚簇索引。搜索将检索大表中的主键以获取哈希值,然后使用该哈希值从大表中获取记录/行。

如果大牌桌上没有主键,那么情况会更糟。您需要将该哈希值添加为大表中的新列,并在该哈希值列上创建非聚簇索引。这将是第301号列,比关系数据库中的良好表格设计更进一步。

也许你现在没有时间正确地规范化表格,但是从长远来看,你必须对大表​​进行规范化,否则从长远来看你会遇到问题。