注册
登录
复合模型
MySQL:使3个字段的复合索引,或使3个单独的索引?
返回
MySQL:使3个字段的复合索引,或使3个单独的索引?
作者:
狗头军师
发布时间:
2024-12-09 08:48:57 (18天前)
我有一个MySQL表,除其他属性外,该表具有时间戳,类型和user_id。
它们都是可搜索和/或可排序的。
为每个索引创建索引,还是为所有三个索引创建单个复合索引,或者两者都更好?
收藏
举报
2 条回复
1#
回复此人
v-star*위위
|
2020-08-23 15-54
Pablo的答案是正确的,但也许您不会意识到复合索引可能是合理的。 你可以有多个指标,并具有idx1(tstamp, user_id)不从具有排除,你indx2(tstamp, type)还是idx1reverse(user_id, tstamp)等等... 当复合索引涵盖查询中的所有条件时,它们将最有用,因此您建议的索引对于 `SELECT * FROM my_table WHERE tstamp = @ts1 AND user_id = @uid AND type = @type` 如果要提高此类查询的性能,可以考虑添加复合索引。 索引的缺点是它减慢了所有更新操作的速度。但是,大多数通用应用程序会执行更多的选择,然后进行更新(无论是在事务处理方面,即在语句数方面,尤其是在受影响/检索到的记录方面),同时更能容忍更新速度较慢(用户主要判断更新速度)系统不是在需要更新记录的时候,而是在检索记录的时间;不是YMMV,而且有些应用程序没有按照这样的规则进行播放。 最好的办法是,如果您有某种方法可以根据典型的工作负载测试数据库性能(创建一些典型的SQL脚本;独立且可重复的,或者在应用程序级别创建单元测试),然后可以客观地调整数据库。 编辑 还意识到,可以添加和删除索引,而不会影响系统的功能。因此,您可以稍后在系统的实际使用期间调整索引-通常,您将收集并分析缓慢的SQL查询,以查找可从添加索引中受益的条件。
编辑
登录
后才能参与评论