最近我学会了索引的奇妙之处,性能有了显著提升。然而,尽管我学到了很多,但似乎找不到答案。
索引很好用,但为什么不能对所有字段建立索引,以使表格极快呢?我相信有一个不错的理由不这么做,但是在30个字段的表格中选择3个字段呢?在30个字段中选择10个呢?应该在哪里划线,为什么?
最近我学会了索引的奇妙之处,性能有了显著提升。然而,尽管我学到了很多,但似乎找不到答案。
索引很好用,但为什么不能对所有字段建立索引,以使表格极快呢?我相信有一个不错的理由不这么做,但是在30个字段的表格中选择3个字段呢?在30个字段中选择10个呢?应该在哪里划线,为什么?
索引占用内存空间(RAM); 索引太多或太大会导致数据库不得不在磁盘和内存之间进行交换。它们也会增加插入和删除时间(每个索引必须针对每个插入/删除/更新的数据进行更新)。
您没有无限的内存。确保所有索引都适合RAM = 好。
您没有无限的时间。仅为需要索引的列建立索引可最小化插入/删除/更新的性能影响。
请记住,每次更新、插入或删除行时都必须更新每个索引。因此,您拥有的索引越多,写操作的性能就会越慢。
此外,每个索引占用更多的磁盘空间和内存空间(调用时),因此对于大型表,它可能会潜在地减缓读取操作。 点击这里查看
需要平衡CRUD需求。写入表变得很慢。至于在哪里划界限,这取决于数据的访问方式(排序、过滤等)。
在表中索引所有列并不是一个好主意。虽然这将使读取表格非常快,但写入速度会变得更慢。对于已经索引了每一列的表进行写入操作,需要将新记录放入该表中,然后将每一列的信息放入其自己的索引表中。
主键:我还不确定,也许如果有人阅读这篇文章能够在这个问题上提供帮助。
其他字段:第一个自然的答案是剩余字段数量的一半。为什么呢?如果你应该建立更多索引,那么你离最佳答案就不远了;如果你应该建立更少的索引,那么你也不会差太远,因为我们知道没有索引很糟糕,所有的索引也很糟糕。
从这三点可以得出结论:如果我们有由K个键组成的L个字段,那么极限值应该在((L-K)/2)+K左右,或者大约是L/10。
这个答案基于我的逻辑和个人实践。
首先,在SAP - ABAP和后台数据库中,我们可以为所有所需索引字段创建一个索引表,我们将只拥有它们的地址。因此,其他与SQL相关的软件-数据库系统也可以使用一个表来索引所有字段。
其次,写入性能是什么?例如,一家公司一天记录50个销售订单。假设有一个名为VBAK销售订单头表,例如每个表具有30个字段,每个字段长度为20个字符..
我可以在几秒钟内写入实际表格,但其他索引表可以在后台工作,同时尝试运行报告,对于这个报告,当搜索索引表时,可以有一个逻辑-用于数据库编程-一个索引写入过程正在进行并等待它结束(例如同时记录5个销售订单,并且可能需要5秒钟)..因此,正在运行的报告可以等待5秒钟,然后运行5秒钟,总计10秒钟..
没有索引,运行报告不会等待5秒钟的写入性能..但可能要运行40秒钟...
那么,写入性能的意义是什么,没有人同时写入数千条记录。但是读取它们。
读取第二个表格意味着:所有字段都已经排序好了。我选择了3个字段,可以找到需要搜索这些数据的排序集,然后将它们带出来...这不是RAM,也不是内存,只是一个复制的索引表,每个字段只有一个数据-地址数据..什么内存?
我认为,这是软件公司对客户隐藏的秘密之一,不要让他们醒悟过来,否则他们将不再需要未来价格昂贵的另一个系统。