如果我创建以下两个指标
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 Cardinality Sub_part Packed Null Index_type Comment Index_commentrequests 1 daily_ips 1 exec_date A 413 NulL NulL YES BTREE requests 1 daily_ips 2 ip_address A 218334 NulL NulL YES BTREE requests 1 is_cached 1 exec_date A 165 NulL NulL YES BTREE requests 1 is_cached 2 cached A 165 NulL NulL YES BTREE
我有以下查询
EXPLAIN SELECT exec_date,100 * SUM(CASE WHEN cached = 'no' THEN 1 ELSE 0 END) / SUM(1) cached_no,100 * SUM(CASE WHEN cached != 'no' THEN 1 ELSE 0 END) / SUM(1) cached_yesFROM requestsGROUP BY exec_date;ID select_type table type possible_keys key key_len ref rows Extra1 SIMPLE requests index NulL daily_ips 263 NulL 436695
但是我想强制查询优化器使用is_cached索引而不是daily_ips索引.
如果我删除daily_ips索引并再次添加它
ALTER table requests DROP INDEX daily_ips;ALTER table requests ADD INDEX daily_ips(exec_date,ip_address);
然后运行相同的EXPLAIN语句,查询优化器选择is_cached索引.
ID select_type table type possible_keys key key_len ref rows Extra1 SIMPLE requests index NulL is_cached 6 NulL 440493 Using index
查询优化器是否期望根据添加的顺序选择索引?
如何告诉查询优化器使用哪个索引?
最佳答案您可以指定查询运行哪个索引sholud.试试这个:
EXPLAIN SELECT exec_date,100 * SUM(CASE WHEN cached != 'no' THEN 1 ELSE 0 END) / SUM(1) cached_yesFROM requests USE INDEX(is_cached)GROUP BY exec_date;
USE INDEX和FORCE INDEX之间的差异:
通过指定USE INDEX(index_List),您可以告诉MysqL仅使用其中一个命名索引来查找表中的行.替代语法IGnorE INDEX(index_List)可用于告诉MysqL不使用某些特定索引或索引.如果EXPLAIN显示MysqL正在使用可能索引列表中的错误索引,则这些提示很有用.
您还可以使用FORCE INDEX,其作用类似于USE INDEX(index_List),但另外还假设表扫描非常昂贵.换句话说,只有在无法使用某个给定索引查找表中的行时才使用表扫描.
UPDATE
试试这个查询:
SELECT exec_date,100 * SUM(IF(cached = 0,1,0)) / SUM(1) cached_no,100 * SUM(IF(cached = 1,0)) / SUM(1) cached_yes FROM (SELECT exec_date,IF(cached = 'no',1) cached FROM requests GROUP BY exec_date) AS A
总结 以上是内存溢出为你收集整理的mysql – 创建指标的顺序会影响查询优化器将选择哪个索引?全部内容,希望文章能够帮你解决mysql – 创建指标的顺序会影响查询优化器将选择哪个索引?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)