mysql一般查询性能 mysql的读写速度是什么级别?
嗯,这个一般和数据大小,硬盘写入速度,内存,cpu处理速度有关。性能越高,在一条sql语句中处理的小块数据就越多。
2020-07-09:MySQL如何启动慢速查询?
而mysqld可以通过配置log-slow-queriesfile-path来记录慢速查询,重启后生效。
Mysqldumpslow,一个分析慢速查询日志的工具,由mysql官方提供。主要功能包括统计类型、出现次数、最长执行时间、累计总时间、等待锁的时间、发送给客户端的总行数、总行数、用户数和sql语句本身。这样可以快速定位问题点,也可以为下一条sql提供充分的参考。
有一些第三方工具,但我还没有 我没用过它们。好像有些GUI工具比较好用。你可以搜索他们。我不 我不能用它,因为我 我担心在生产环境中部署更多的软件会导致更多的安全漏洞。
希望你的回复会有帮助。
这个专业回答怎么配图?为什么只有有图的才能高质量回答?
查询摘要
孔子说工欲善其事,必先利其器。 "
善于使用好的性能分析工具,可以让运维效率事半功倍。Pt-query-digest是Percona Toolkit中的常用工具,用于分析MySQL数据库的慢速日志、二进制日志和通用日志,也可以使用从tcpdump中捕获的show
我来说说这个问题:
题目提到的查询应该是这样的:select * from a where id in(select id from b)。
对于这个sql语句,它的执行计划不是先查询表B的所有id,然后再与表A的id进行比较..
Mysql会将in子查询转换成现有的相关子查询,所以实际上相当于这个sql语句:select * from a where exists(select * from b 循环出表A中的每一条记录并与表B进行比较,比较的条件是看表A中每一条记录的id是否存在于表B中,如果存在,则返回表A中的这条记录..
exists查询的缺点是什么?
根据存在的实现原理,表A(外观)你可以 如果不使用索引,您必须扫描整个表,因为您要从表A到表B查找数据,并且您必须使用表A中的数据在表B中查找(从表外到表内),顺序是固定的。
如何优化?
索引。但是从上面的分析可以看出,索引只能建立在表B的id字段中,而不能建立在表A的id中,mysql可以 不要用它。
这样优化就够了吗?It it'还是有点短。
因为exists只能用表A到表B的数据(从表外到表内)查询它的执行计划,虽然它可以在表B的id字段建立索引来提高查询效率。
然而,你可以 t从表B到表A依次取数据,exists子查询的查询顺序是固定的。
为什么反过来呢?
因为你首先可以确定的是,反过来的结果是一样的。这就引出了一个更详细的问题:当两个表的id字段都有索引时,是表A查表B的效率高还是表B查表A的效率高?
如何进一步优化?
将查询修改为inner join连接查询:select * from an inner join b on(但这还不够,再往下看)。
为什么不用左连接和右连接?
此时,表之间的连接顺序是固定的,
例如,左连接意味着必须先检查左表并扫描整个表,然后逐个转到另一个表,右连接也是如此。仍然不是最佳选择。
为什么我可以只使用内部连接?
内连接中的两个表,比如A内连接B,但是实际执行顺序和写的顺序无关,最后执行的可能是B连接A,顺序不固定。如果on条件字段有索引,也可以使用较高的索引。
那怎么才能知道A和B的执行顺序哪个更有效率呢?
你不 我不知道,我也不知道。谁知道呢?Mysql知道的。让mysql自己判断(查询优化器)。mysql查询优化器将评估每个案例的成本,并最终选择最佳的一个作为执行计划。
在inner join的连接中,mysql会评估是用表A查表B更高效还是用表B查表A更高效,如果两个表都有索引,mysql还会评估表A的条件字段上的索引效率更高还是表B的更高..
我们需要做的是对两个表的连接条件的两个字段进行索引,然后解释,检查执行计划,看mysql使用了哪个索引,最后去掉没有使用索引的表的字段索引。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。