我现在卡住了一段时间,Select_full_join号码不断增加。
我正在使用“log-queries-not-using-indexes”,我查看了mysql-slow.log,发现了很多像这样的查询:
# Time: 131106 16:44:51
# User@Host: XXX @ localhost []
# Query_time: 0.000497 Lock_time: 0.000061 Rows_sent: 1 Rows_examined: 0
SET timestamp=1383752691;
SELECT COUNT(*) AS expression
FROM
(SELECT 1 AS expression
FROM
com_c_jobs_listing cj
WHERE (category IN ('Operations', 'Business Development', 'Sales/Account Management', 'R&D', 'Internal IT')) AND (country IN ('Brazil', 'China', 'France', 'Germany', 'Italy', 'Japan', 'Korea', 'Netherlands', 'Russia', 'United Kingdom', 'United States')) ) subquery;
我不明白为什么记录这个。 此外,还有一个类别和国家的索引。
我想我错过了什么,但我找不到......
这是解释查询的结果:
id select_type表类型possible_keys键key_len ref行额外
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL选择已优化的表 2 DERIVED cj范围类别,国家类别302 NULL 86使用where
我该怎么办?有什么想法吗?
答案 0 :(得分:0)
从您的解释扩展(此处截断):
id select_type possible_keys key key_len
1 PRIMARY NULL NULL NULL
2 DERIVED category,country category 302
您可以看到为派生子查询选择了一个键,但您的父查询依赖于派生表,因此没有编入索引(没有可能的键)。
为什么你有子查询而不直接计算行?
SELECT COUNT(*) AS expression
FROM com_c_jobs_listing cj
WHERE category IN ('Operations',
'Business Development', 'Sales/Account
Management', 'R&D', 'Internal IT')
AND country IN ('Brazil', 'China', 'France',
'Germany', 'Italy', 'Japan', 'Korea', 'Netherlands',
'Russia', 'United Kingdom', 'United States');