我们有一个数据库,其中有关客户活动的日志每秒都在节省。
另一方面,仪表板站点每秒从该数据库中选择最近的数据。因此,每秒执行数百个insert
和select
个查询。
我应该使用数据库上的索引来减少select
语句执行时间吗?
答案 0 :(得分:1)
我会避免索引。
如果您实时登录,则记录的每个用户操作都需要插入语句。索引将使插入基本上从O(1)减慢到O(log n),其中log n是表的大小。如果您的应用程序是同步的并且是单线程的...这将是不好的。
我会问自己这些问题:
我是否需要实时仪表板。
如果是这样,我可以在单独的线程或单独的服务器上进行日志记录,因此插入速度慢是不是一个问题?
答案 1 :(得分:1)
如果需要扫描更多数据,如果没有索引,您的选择将随着时间的推移变得越来越慢。这是不可接受的。最终你将被迫索引。
添加索引。
答案 2 :(得分:0)
可能不是。作为在(几乎)每个表上都有一个聚簇索引的信徒(每个表是否应该有一个聚簇索引已成为某些人的宗教辩论)我曾经认为每个表应该有一个聚簇索引。但由于非常困难的问题,我发现尽管它对选择非常有用,但它可以(会?)减慢插入速度以至于它会损害应用程序。
您可能希望测试,使用和不使用聚簇索引来查看是否会发生这种情况。我也注意到在某一点(表格上的8到12个索引)插入可能真的变慢,所以即使你决定使用索引(这可能是一个好主意)太多可能会减慢你的应用程序。仔细测试和监控您的应用程序。
通过在日志表上使用CDC(更改数据捕获),您可以充分利用两个世界(日志表上没有索引,因此它的快速以及包含大量索引的表用于报告)。这是一种将所有更改复制到另一个表的低影响方式,该表可以使用索引达到kazoo以进行快速选择,而对日志表的影响非常小。