sql - 什么是索引以及如何使用它们来优化数据库中的查询?

标签 sql sql-server database-design

我正在维护一个相当大的应用程序和数据库,并且注意到我们的一些存储过程中的数据库性能较差。

我总是听说“添加索引”可以提高性能。我当然不是 DBA,我不明白索引是什么、它们为什么有用以及如何创建它们。

我基本上需要索引 101。

有人可以给我资源以便我学习吗?

最佳答案

根据经验,索引应该位于您在连接或 where 子句中使用的任何字段(如果它们有足够多的不同值使得使用索引值得,那么只有几个可能值的字段不会从索引中受益)索引,这就是为什么尝试对位字段进行索引是毫无意义的)。

如果您的结构已正式创建主键(应该如此,我从不创建没有主键的表),那么根据定义,这些主键会被索引,因为主键需要有唯一索引。人们经常忘记他们必须为外键建立索引,因为在设置外键关系时不会自动创建索引。由于外键的目的是为您提供一个要连接的字段,因此大多数外键可能应该建立索引。

索引一旦创建就需要维护。如果您有大量数据更改事件,它们可能会变得碎片化且性能降低,并且需要刷新。阅读有关索引的在线书籍。您还可以在那里找到创建索引语句的语法。

索引是一种平衡行为,您添加的每个索引通常都会增加数据插入、更新和删除的时间,但可能会加快复杂插入、更新和删除中的选择和连接速度。尽管上面的经验法则是一个很好的起点,但没有一个公式可以确定什么是最佳索引。

关于sql - 什么是索引以及如何使用它们来优化数据库中的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/105400/

相关文章:

sql-server - 表锁定建议

c# - 从中心和半径创建一个 SqlGeography 多边形圆

ruby-on-rails - 复合主键与唯一对象 ID 字段

php - 需要有关数据库设计和表结构的建议

sql - 如何找到每个经理下的所有员工

sql - *= 在 Sybase SQL 中

sql-server - SQL Server : Isolation level leaks across pooled connections

sql - PostgreSQL - 创建表并设置特定的日期格式

sql - exec(@sql) 的返回值

php - 使用来自 PHP 应用程序的数据输入管理多个 MySQL 1 GB 数据库