mysql – 创建指标的顺序会影响查询优化器将选择哪个索引?
发布时间:2020-12-11 23:47:06 所属栏目:MySql教程 来源:网络整理
导读:如果我创建以下两个指标 ALTER TABLE requests ADD INDEX daily_ips(exec_date,ip_address);ALTER TABLE requests ADD INDEX is_cached(exec_date,cached); 请求的show index输出如下 Table Non_unique Key_name Seq_in_index Column_name Collation Cardina
如果我创建以下两个指标
请求的show index输出如下
我有以下查询
但是我想强制查询优化器使用is_cached索引而不是daily_ips索引. 如果我删除daily_ips索引并再次添加它
然后运行相同的EXPLAIN语句,查询优化器选择is_cached索引.
查询优化器是否期望根据添加的顺序选择索引? 如何告诉查询优化器使用哪个索引? 最佳答案 您可以指定查询运行哪个索引sholud.试试这个:
USE INDEX和FORCE INDEX之间的差异: 通过指定USE INDEX(index_list),您可以告诉MySQL仅使用其中一个命名索引来查找表中的行.替代语法IGNORE INDEX(index_list)可用于告诉MySQL不使用某些特定索引或索引.如果EXPLAIN显示MySQL正在使用可能索引列表中的错误索引,则这些提示很有用. 您还可以使用FORCE INDEX,其作用类似于USE INDEX(index_list),但另外还假设表扫描非常昂贵.换句话说,只有在无法使用某个给定索引查找表中的行时才使用表扫描. UPDATE 试试这个查询:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |