这听起来可能是个幼稚的问题,但mysql中什么时候需要数据库表索引呢?这些索引是如何影响性能的,为什么?
发布于 2012-12-23 01:16:24
数据库索引的目的是提高数据表中搜索的性能。
您可能已经知道,对于未排序的数据结构,搜索的渐近表示法O(f(n))是O(n)。这意味着,在最坏的情况下,将检查表的所有行,以便使行匹配WHERE子句(连接列也是如此)。在一张小桌子上可能没那么糟,但在一张大一点的桌子上,它可能会变得很慢。
由于数据表不能实际包含多列的已排序数据(一般来说,它只能由单个列进行物理排序),因此索引变得非常方便。总之,索引通常是一个B-树 (或变体)排序映射,包含特定的列数据作为键,行信息作为条目值。这样,就可以将O(f(n))简化为O(log(n))。
是否需要索引?不是的。但是,如果您以正确的方式使用索引,您的查询将显示出极大的性能提升。
然而,性能增益有其缺点:为了提高搜索性能,插入和删除操作变得更慢(因为必须更新索引)。以下是针对不同数据结构的一些渐近摊销最坏情况分析。记住,这只是对这件事的介绍。您肯定应该更深入地了解数据库索引。
发布于 2012-12-23 02:14:13
基本上,列上的索引允许您非常快速地查找该列中具有特定值(或值范围)的表的所有行,而不必查看每一行,而不管表有多大。
因此,索引可以大大加快具有引用该列的WHERE子句的查询,以及联接和嵌套SELECT。特别是对于非常大的表,索引对于获得良好的性能是绝对必要的。但是,当然,只有在查询实际使用的列上有它们的情况下,它们才有帮助。
https://softwareengineering.stackexchange.com/questions/180421
复制相似问题