7-6 如何确定查询处理各个阶段所消耗的时间

profile

image.png

show profile for query 1;
Sending data 消耗时间最多,可以用索引优化

show profile cpu for query 1;
cpu信息

profile 警告不推荐使用了


推荐用Performance Schema

Performance Schema

开启

UPDATE ‘setup_instruments‘ SET enabled='YES',TIMED='YES' WHERE NAME LIKE 'stage%';
UPDATE setup_consumers SET enabled='YES' WHERE NAME LIKE 'events%';

执行某个sql

查询

结果

实例

然后暂停几秒给主从数据库提供同步的时间

image.png

修改表结构

1.对字段类型/宽度修改 会锁表
2.主从数据库延迟
解决
1.切换到从服务器再改一次
2.建一新表,把老表数据同步过去,删除老表用新表重命名代替,好处是只在重命名时加一短暂的锁

工具完成这一过程

alter 要做的修改 update 语句去掉(这里是把c列宽度改成150)
update 表名后的部分
user 用户名 D数据库名 t表名

not in <>

SELECT first_name
FROM customer

WHERE customer_id

NOT IN (
SELECT customer_id FROM payment
)

会多次对payment进行查询

SELECT a.first_name
FROM customer a
LEFT JOIN payment b ON a.customer_id =b.customer_id
WHERE b.customer_id IS NULL

改成LEFT JOIN 就一次了

汇总表优化

如 商品评论数 一般会写
SELECT COUNT(*) FROM product_comment WHERE product_id = 4687
不如建一个汇总表,凌晨时统计一次
CREATE TABLE product_comment_cnt(product_id INT ,cnt INT;
然后之前的查询变为

SELECT SUM(cnt) FROM (

SELECT cnt FROM product_comment_cnt WHERE product_id = 999
UNION ALL

SELECT COUNT(*) FROM product_comment WHERE product_id = 999
AND timestr>DATE(NOW0)

) a 
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,205评论 2 89
  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 12,405评论 5 115
  • 橙宝 : 亲亲 好,谁的话都可以不听,一定得听你们的。等橙子成熟了,就来慢慢做。可能,保质期比较短,可以用小瓶,也...
    秭归橙子和水果阅读 2,481评论 0 0
  • 记得去年参加了一个培训,主讲的两位老师是两口子,来自台湾。后来聊天时问到老师喜欢吃什么,老师不假思索脱口而出:冒菜...
    燕语叮咛阅读 4,298评论 6 8
  • 老花眼 海有多深,现有的科学技术已经能准确地测出。人有多少卑鄙,哪怕科学再发展个千百年也未必能够测出。古往今来...
    老花眼阅读 3,966评论 1 2

友情链接更多精彩内容