查询时,索引表是否比非索引表更快?

use*_*212 1 sql database

假设我们有2个相同的表,有数百万行,并且它们有业务事务,两个表都有完全相同的信息.一列指定行是"销售"还是"订单",其他列指定名称(通常重复),日期,金额,税收等....

表中的数据没有组织,因此销售和订单以及其他数据不会以任何方式排序.

唯一的区别是其中一个表有一个额外的列,它有唯一的主键.

如果我使用相同的查询查询具有相同WHERE子句的表,这些子句不涉及主键.一些涉及的查询可能类似于:WHERE action ="sale"和name ="Bob Smith"

其中一个是havix指数会更快吗?

Bra*_*vic 6

每个索引都是纯冗余:

  • 成本存储空间,
  • 占用缓存空间,否则可能被其他东西占用
  • 必须在INSERT/UPDATE/DELETE上维护.

如果查询可以使用索引,则加速通常会大大超过上面列出的因素.相反,如果未使用索引,则它不应该存在.

但在尝试消除索引及其顶部的密钥之前,请记住,如果数据不正确,性能无关紧要.由于应用程序错误1,没有至少主键的表对重复行是开放的,不能充当FOREIGN KEY的父端点,并且在客户端代码中无法合理地识别其行.

尝试识别已经"嵌入"数据的自然主键,或者至少创建一个代理键(正如您在其中一个表中所做的那样).


1严格地说,这样的表甚至不代表关系,这不再是"关系型"数据库.关系的数学概念是一个集合,而不是多集合,意味着元素要么在集合中,要么不在集合中,但不能多次出现在集合中.