R_U*_*ser 10 mysql query-optimization explain
我要选择的列的内容text从entrytable.
EXPLAIN SELECT text
FROM entrytable
WHERE user = 'username' &&
`status` = '1' && (
`status_spam_user` = 'no_spam'
|| (
`status_spam_user` = 'neutral' &&
`status_spam_system` = 'neutral'
)
)
ORDER BY datum DESC
LIMIT 6430 , 10
Run Code Online (Sandbox Code Playgroud)
该表有三个指数:
EXPLAIN结果是:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE entrytable ref index_user,index_status_mit_spam index_user 32 const 7800 Using where; Using filesort
Run Code Online (Sandbox Code Playgroud)
possible_keys指数的MySQL可能要使用和keysMySQL的实际使用指标?index_status_mit_spam不使用索引?在查询中,列的顺序与索引中的顺序相同,...index_datum不用于ORDER BY?回答你的问题:
是possible_keys指数的MySQL可能要使用和keysMySQL的实际使用指标?是的,这是正确的.
为什么index_status_mit_spam不使用索引?在查询中,列的顺序与索引中的顺序相同.SQL 使用表的索引的统计信息来确定要使用的索引.该领域中的select语句顺序没有影响到使用哪个索引.索引周围的统计信息包括索引的唯一性和其他内容等信息.可能会使用更多unqiue索引.在此处阅读更多相关信息:http://dev.mysql.com/doc/innodb/1.1/en/innodb-other-changes-statistics-estimation.html或此处:http://dev.mysql.com/doc/ refman/5.0/en // myisam-index-statistics.html.这些因素决定了MySQL如何选择要使用的索引.它只会使用一个索引.
为什么索引index_datum不用于ORDER BY?MySQL在查询期间将仅使用一个索引而不是两个索引,因为使用第二个索引会使查询变得更慢.读取索引不是读表.这与查询的操作效率有关.以下是可以解释一些概念的答案:https://dba.stackexchange.com/questions/18528/performance-difference-between-clustered-and-non-clustered-index/18531#18531或者 向MySQL查询添加限制子句会减慢它显着下降 或 MySQL索引以及何时对它们进行分组.这些答案有很多细节,可以帮助您理解MySQL索引.
如何优化表索引或查询?(上面的查询需要最多3秒钟,表中有大约一百万个条目).那么这里有一个文件库,可能会减慢你的速度.可能是表有太多索引而MySQL正在选择错误的索引.
您需要了解索引会加快读取速度并减慢对表的写入速度.因此,添加索引并不总是一个好主意.以上答案和指示应该有助于您获得扎实的理解.
possible_keys表示表的所有索引(键或索引列) FORCE INDEX、USE INDEX或IGNORE INDEX检查此链接 - http://dev.mysql.com/doc/refman/5.1/en/index-hints.html。
您可以通过向提示添加 FOR 子句来指定索引提示的范围。这为优化器为查询处理的各个阶段选择执行计划提供了更细粒度的控制。要仅影响 MySQL 决定如何在表中查找行以及如何处理联接时使用的索引,请使用 FOR JOIN。要影响对行进行排序或分组的索引使用情况,请使用 FOR ORDER BY 或 FOR GROUP BY。(但是,如果表存在覆盖索引并且用于访问表,则优化器将忽略禁用该索引的 IGNORE INDEX FOR {ORDER BY|GROUP BY} 提示。)
尝试强制不同的索引 - 检查此链接以确保 - MySQL `FORCE INDEX` 用例?
了解 EXPLAIN 输出格式 - http://dev.mysql.com/doc/refman/5.1/en/explain-output.html