MySQL 5.5.8:
问题 1:
以下陈述是否有任何不同,如果有,哪一个是首选的性能明智的?甚至可以在不知道 where 子句前后表的行数以及可能的索引用法的情况下回答这个问题吗?
SELECT *
FROM a JOIN b ON a.id = b.id AND a.col2 BETWEEN 1 AND 5;
SELECT *
FROM a JOIN b ON a.id = b.id
WHERE a.col2 BETWEEN 1 AND 5;
Run Code Online (Sandbox Code Playgroud)
我问的原因是因为例如,如果表很大,但 where 子句过滤掉了 99.9999% 的记录,如果在连接后 99.9999% 的记录没有被使用,我不想浪费时间连接大量表。
问题2:
采取相同的情况,哪个语句(如果有任何不同)需要更少的 IOPS。(索引出现在 b.id 上,一个出现在 a.col2 上)
我在考虑为什么 mysql 中的一些特殊命令如create user, grant privileges,drop user当正确传递 return 时"0 rows affected",这是不正确的!(mysql db 中的行确实受到影响)
我知道没有标准查询,但如果我们delete from user where ...在mysql数据库上做,我们会看到N rows affected.
所以它可以用相当简单的方式计算。
否则响应“Query OK (0.00 sec)”会更准确。
还是我错过了什么?我用几个mysql 5.1-5.5版本验证了上面的内容。