分享一篇mysql优化的实例

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于web应用尤其明显。关于数据库的性能,这并不只是dba才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的sql语句),我们都需要注意数据操作的性能。这里,我们不会讲过多的sql语句的优化,而只是针对mysql这一web应用最多的数据库。希望下面的这些优化技巧对你有用。

1.表结构

CREATE TABLE `room_break_history_tmp_test ` (  `id` INT(11) NOT NULL AUTO_INCREMENT,  `break_type` INT(11) DEFAULT NULL,  `app_id` INT(11) DEFAULT NULL,  `room_id` INT(11) DEFAULT NULL,  `from_user_id` INT(11) DEFAULT NULL,  `to_user_id` INT(11) DEFAULT NULL,  `content_type` INT(11) DEFAULT NULL,  `content_name` VARCHAR(300) DEFAULT NULL,  `source_message` VARCHAR(1536) DEFAULT NULL,  `send_message` VARCHAR(1536) DEFAULT NULL,  `request_type` INT(4) DEFAULT NULL,  `report_relation` VARCHAR(1536) DEFAULT NULL,  `handle_type` INT(11) DEFAULT NULL,  `handle_uid` INT(11) DEFAULT NULL,  `create_time` DATETIME DEFAULT NULL,  PRIMARY KEY (`id`),  KEY `idx_from_user_id` (`room_id`,`from_user_id`,`handle_type`,`create_time`)) ENGINE=INNODB AUTO_INCREMENT=3416971 DEFAULT CHARSET=utf8mb4

2.执行语句

DESC SELECT   COUNT(1) FROM  (SELECT     COUNT(1)   FROM    room_break_history_tmp_test   WHERE `create_time` BETWEEN '2017-07-01 22:25:33'     AND '2017-07-01 22:27:00'     AND handle_type = 5   GROUP BY room_id,    from_user_id) AS keywordtemp

3.执行计划

    id  select_type  table               type    possible_keys     key               key_len  ref        rows  Extra                     ------  -----------  ------------------  ------  ----------------  ----------------  -------  ------  -------  --------------------------     1  PRIMARY                ALL     (NULL)            (NULL)            (NULL)   (NULL)  3438331  (NULL)                         2  DERIVED      room_break_history  index   idx_from_user_id  idx_from_user_id  21       (NULL)  3438331  Using where; Using index

4.执行时长:

Execution Time : 17.182 sec
Transfer Time  : 0.001 sec
Total Time     : 17.184 sec

5.描述,就执行计划看,type为index,key及key_len正常,看似是走了索引,但是rows几乎是全表记录(不准确,就是全表扫描),300多万的数据执行时长居然17秒。

 

思考:将字段的nullable改为not null后,key_len变短了,是不是将是否为空的判断逻辑添加到了数据上?

seacms影视管理系统 seacms影视管理系统

海洋影视管理系统(seacms,海洋cms)是一套专为不同需求的站长而设计的视频点播系统,灵活,方便,人性化设计简单易用是最大的特色,是快速架设视频网站首选,只需5分钟即可建立一个海量的视频讯息的行业网站。海洋cms采用PHP+MYSQL架构,原生PHP代码带来卓越的访问速度和负载能力免去您的后顾之优。海洋cms支持一键转换原max的模板和数据,实现网站无缝迁移到新平台。众多人性化功能设计,超

seacms影视管理系统 116 查看详情 seacms影视管理系统

有关null的文章:

改进:

1.添加索引

ALTER TABLE `test`.`room_break_history_tmp_test`     ->   ADD  INDEX `idx_handle_time` (`handle_type`, `create_time`);

2.执行计划

    id  select_type  table                        type    possible_keys                     key              key_len  ref       rows  Extra                                                   ------  -----------  ---------------------------  ------  --------------------------------  ---------------  -------  ------  ------  --------------------------------------------------------     1  PRIMARY                         ALL     (NULL)                            (NULL)           (NULL)   (NULL)       2  (NULL)                                                       2  DERIVED      room_break_history_tmp_test  range   idx_from_user_id,idx_handle_time  idx_handle_time  7        (NULL)       1  Using index condition; Using temporary; Using filesort

3.执行时长

Execution Time : 0.178 sec
Transfer Time  : 0 sec
Total Time     : 0.179 sec

 

以上就是分享一篇mysql优化的实例的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1080568.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
在Java中如何使用EnumMap实现枚举映射_EnumMap集合使用指南
上一篇 2025年12月2日 18:19:22
百分比布局真的会影响页面性能吗?该如何优化?
下一篇 2025年12月2日 18:19:31

相关推荐

发表回复

登录后才能评论
关注微信