sql - 表扫描与添加索引——哪个更快?

标签 sql database optimization indexing

我有一个包含数百万行的表。我需要找到具有特定列值的所有行。该列不在索引中,因此会产生表扫描结果。

但是添加一个列在头部(主键后面)的索引,进行查询,然后删除索引会更快吗?

我无法永久添加索引,因为用户正在指定他们要查找的列。

最佳答案

需要思考的两个问题:

  1. 可以为查询指定多少列?
  2. 数据是否经常变化?很多吗?

如果您有少量个候选列,并且数据没有很多变化,那么您可能需要考虑在任何或甚至所有候选列。

亵渎!”,我听到了。大多数消息来源告诉您“永远不要”为表的每一列编制索引,但该建议是基于表被频繁修改的一般假设。

您将付出额外存储空间的代价,并在数据更改时影响性能。

多小是,多少是很多,权衡是否值得? 没有办法告诉修道院,因为“太慢”通常是一种主观衡量。

您将不得不尝试一下,测量索引的大小,然后测量它们在搜索中的效果。您必须在成本与提高客户满意度之间取得平衡。

[已添加]哦,还有一件事:临时索引不仅在物理上比表扫描慢,而且它们会破坏您的并发性。重新索引表通常(总是?)需要全表锁,因此实际上一次只能执行一个用户搜索。

祝你好运。

关于sql - 表扫描与添加索引——哪个更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30094/

相关文章:

php - MySQL根据模板数据库创建数据库

java - Android - 内容值覆盖现有行

sql-server - 如何优化这个查询?

MySQL 计算为行

database - 如何执行一个sql文件

php - 将插入的 id 用于另一个列值

c# - .NET 局部变量优化

matlab - 使用 fminsearch 同步两对曲线的交点

sql - 普遍的 SQL 查询

sql - SQL 中多个索引的正确用法 (SQL Server 2014)