完成良好的归一化之后,还需要对表建立索引吗?这将如何影响性能?良好的规范化后,它甚至会以某种方式影响性能吗?
如果您已经具有主键和外键,通常会索引哪些列?
规范化数据库似乎已经有效。但是,我可能已经跳过了索引如何影响数据库。这仅在使用查询时有效吗?如何运作/执行并改善数据库?
完成良好的归一化之后,还需要对表建立索引吗?这将如何影响性能?良好的规范化后,它甚至会以某种方式影响性能吗?
如果您已经具有主键和外键,通常会索引哪些列?
规范化数据库似乎已经有效。但是,我可能已经跳过了索引如何影响数据库。这仅在使用查询时有效吗?如何运作/执行并改善数据库?
Answers:
是。实际上,您很可能需要更加注意索引。规范化是关于最佳存储。这通常与检索速度不一致,因为使用了具有复杂联接的更复杂查询。有时,维护需要快速检索速度的数据库的人会取消规范化,或将其数据排列在规范化程度稍差的结构中,以使检索更加容易。
我认为您误解了索引对数据库性能的影响。
索引可帮助数据库查找行。索引是专用的数据结构,以交换额外的磁盘空间和插入和更新时的某些性能,可以帮助数据库引擎驻留在匹配的行上。
因为它们需要额外的空间和成本(很少)性能来保持最新,所以作为数据库设计人员,您必须显式创建索引以适合您的应用程序和查询模式。
索引与数据库规范化正交。
是。
索引是一种加快数据搜索速度的方法。一些查询是通过主键进行的,这些键通常由数据库引擎隐式索引,但是其他查询则可能使用其他列。通常,某些查询会按甚至不唯一的列进行搜索,因此在进行任何规范化后都不能成为主键。您可能必须索引此类列。
只有一种方法可以知道要创建哪些索引。以所有查询的应用程序,发现代表性的例子参数对他们和对数据库引擎展示自己的查询计划(所有的数据库引擎有EXPLAIN
,EXPLAIN QUERY PLAN
或类似的命令,它是在不同的引擎不同的称呼)和测试,他们需要多长时间。比创建索引可以加快速度较慢的索引。而且,不要忘记再次删除您尝试过但无助于避免浪费资源的索引。