暂无图片
MySQL 建立联合索引时,应该把低基数的列放在前还是把高基数的列放在前?
我来答
分享
黎琛
2021-12-13
MySQL 建立联合索引时,应该把低基数的列放在前还是把高基数的列放在前?

MySQL 建立联合索引时,应该把低基数的列放在前还是把高基数的列放在前?

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
冯睿

联合(组合)索引不一定由基数的高低来决定谁是前导列。经常进行等值查询,且选择性较好的列可以作为前导列。以下列出几个组合索引使用的场景总结:

1.组合索引适合用在单独查询时返回记录很多,组合查询返回记录很少的情况。

2.组合查询的组合顺序,要全面考虑单列查询情况。
比如创建一个组合索引 create index idx_object_id on t(object_id,object_type);
谓词限制查询的时候,select * from t where object_id=10; 会使用这个索引,
组合索引应该把经常使用的列放在前面。
第一个查询条件该用哪个字段还是需要综合考虑系统所有查询来进行设计。

3.仅等值无范围查询时,组合索引顺序不影响性能。

4.组合索引最佳顺序一般是将列等值查询的列置前。

暂无图片 评论
暂无图片 有用 1
打赏 0
暂无图片
黎琛
题主
2021-12-13
谢谢
回答交流
Markdown


请输入正文
提交
相关推荐
mysql5.7升级8.0大家用什么方法?
回答 10
已采纳
1直接升级我选
MySQL中的 一个表进行批量删除和批量新增, 每次都是30-80条,qps大概在20左右,会出现delete因锁等待过久而执行耗时异常的情况?
回答 2
得看看是否是数据有重复dml的,然后没有提交影响到了
mysql主从复制 io线程 从库请求主库的二进制是类似直接拷贝的源文件吗?
回答 2
是的,有一定关系,也跟从库的性能有一定关系。MySQL主从复制是一个异步的复制过程,主库发送更新事件到从库,从库读取更新记录,并执行更新记录,使得从库的内容与主库保持一致,并不是直接拷贝的主库的bin
MySQL innodb在高并发下insert会产生死锁,有什么解决方法?
回答 1
已采纳
主要是控制一下写入顺序。死锁一般是A事务操作12  B事务操作 2  1.所以大家只要采用相同的顺序就可以避免死锁。
MySQL数据库导入有什么工具能快些,mysqlpump可以并行备份,但是导入只能串行?
回答 3
已采纳
8.0的话,可以尝试一下,mysqlshellutil工具,是可以支持并行的。据说速度上有很大提升。
mysql如何执行@作为结束符的sql文件
回答 1
在脚本中加一行DELIMITER@ 结束符就是@而不是;了如果要改回分号,可以用 DELIMITER;
MySQL都有哪些读写分离的方案?
回答 7
已采纳
像官方的MySQLRouter,第三方的Proxysql、MaxScale、ShardingProxy给你一个参考https://www.modb.pro/doc/90645
请教各位老大innodb_purge_rseg_truncate_frequency机制的问题
回答 1
这个不会,purge线程会跳过那些属于活跃事务的undo日志,即使这些日志已经很老了。只有当事务最终提交或回滚时,相关的undo日志才会变得可被purge。大事务也只会导致undo的增长,会对系统的性
MySQL字符集问题
回答 1
导出数据,用新的字符集建库或者建表,导入数据直接在线修改参数对于已经保存的数据是没有效果的,还可能会有其他未知的问题出现
MySQL 本地Navicate 密码过期怎么解决?
回答 1
已采纳
我不太明白你的问题,如果是mysql用户过期,可以重新调整密码,并设置不过期的方式比如:ALTERUSER'testuser'@'localhost'PASSWORDEXPIRENEVER;这样就没有