tranlation
事务:
从失败中回复到正常状态的方法
多个应用并发访问数据库时,提供隔离方法

acid
原子性:要么成功、要么失败
一致性:数据保持“合理性”
隔离型:多个事务同时并发执行,每个事务就像各自独立执行一样
持久性:数据持久化到硬盘

使用事务的话表的引擎为innodb引擎

默认是开启自动提交事务

engine:
存储引擎是基于表的
myisam: 不支持事务、表级锁、全文索引、奔溃恢复不好
innodb: 支持事务、行级锁、全文索引(5.6+)、奔溃恢复好

update table set id = 3 where name like 'a%';
更新行数不确定、此时采用表级锁

总结:一般来说myisam是适合不需要事务的时候:做很多count计算
innodb是适合要去事务,可靠性要求高的
推荐使用innodb

index

sql优化方案:
一、开启慢查询日志
第一步:show variables like '%slow%';
第二步:set slow_query_log = on;
slow_query_log_file:慢日志文件,只存放慢查询sql

show variables like '%long%';
long_query_time 10.00000s

第三步:set long_query_time = 0.4; 设置慢查询时间标准
注:重启mysql服务,配置会被恢复到默认。
永久生效方法,要在配置文件my.cnf中进行配置

执行sql,查找slow_query_log_file中执行慢的sql
分析:
mysql> explain select * from test where username = 'user799999';
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| 1 | SIMPLE | test | NULL | ALL | NULL | NULL | NULL | NULL | 798401 | 10.00 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+

mysql> explain select * from test where id = '0799999';
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
| 1 | SIMPLE | test | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+

possible_keys:可能用到的索引
key:实际用到的索引
rows:扫描的行数

mysql> show variables like '%profiling%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| have_profiling | YES |
| profiling | OFF |
| profiling_history_size | 15 |
+------------------------+-------+
3 rows in set (0.00 sec)

mysql> set profiling = on;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show profiles;
Empty set, 1 warning (0.00 sec)

mysql> select * from test where username = 'user799999';
+---------+------------+----------+-------------+---------------------+
| id | username | password | servnumber | createtime |
+---------+------------+----------+-------------+---------------------+
| 0799999 | user799999 | | 18111818911 | 2020-01-13 22:31:18 |
+---------+------------+----------+-------------+---------------------+
1 row in set (0.31 sec)

mysql> select * from test where id = '0799999';
+---------+------------+----------+-------------+---------------------+
| id | username | password | servnumber | createtime |
+---------+------------+----------+-------------+---------------------+
| 0799999 | user799999 | | 18111818911 | 2020-01-13 22:31:18 |
+---------+------------+----------+-------------+---------------------+
1 row in set (0.00 sec)

mysql> show profiles;
+----------+------------+--------------------------------------------------+
| Query_ID | Duration | Query |
+----------+------------+--------------------------------------------------+
| 1 | 0.31259775 | select * from test where username = 'user799999' |
| 2 | 0.00039600 | select * from test where id = '0799999' |
+----------+------------+--------------------------------------------------+
2 rows in set, 1 warning (0.00 sec)

mysql> show profile cpu,block io for query 1;
+----------------------+----------+----------+------------+--------------+---------------+
| Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |
+----------------------+----------+----------+------------+--------------+---------------+
| starting | 0.000084 | 0.000050 | 0.000027 | 0 | 0 |
| checking permissions | 0.000010 | 0.000006 | 0.000003 | 0 | 0 |
| Opening tables | 0.000029 | 0.000019 | 0.000010 | 0 | 0 |
| init | 0.000035 | 0.000023 | 0.000012 | 0 | 0 |
| System lock | 0.000010 | 0.000006 | 0.000003 | 0 | 0 |
| optimizing | 0.000011 | 0.000008 | 0.000004 | 0 | 0 |
| statistics | 0.000020 | 0.000012 | 0.000007 | 0 | 0 |
| preparing | 0.000018 | 0.000013 | 0.000006 | 0 | 0 |
| executing | 0.000005 | 0.000003 | 0.000002 | 0 | 0 |
| Sending data | 0.312217 | 0.307165 | 0.000000 | 0 | 0 |
| end | 0.000026 | 0.000017 | 0.000000 | 0 | 0 |
| query end | 0.000014 | 0.000013 | 0.000000 | 0 | 0 |
| closing tables | 0.000012 | 0.000012 | 0.000000 | 0 | 0 |
| freeing items | 0.000028 | 0.000028 | 0.000000 | 0 | 0 |
| logging slow query | 0.000064 | 0.000065 | 0.000000 | 0 | 8 |
| cleaning up | 0.000015 | 0.000015 | 0.000000 | 0 | 0 |
+----------------------+----------+----------+------------+--------------+---------------+

查看性能详情是否开启
show variables like '%profiling%';
开启性能记录功能
set profiling = on;
查看性能的记录
show profiles;
show profile cpu,block io for query 4;

优化小建议:
查询* 与查询单个字段 查看性能
1、尽量避免使用select * from,尽量精确到想要的结果字段
查询两个条件 用or连接 查看执行计划
2、尽量避免使用or
3、加上limit 限制行数
4、使用like时,%放在前面是会使索引失效 查看执行计划
查询条件字段类型varchar,但条件值类型int时,会进行类型转换 查看执行计划
5、注意条件字段类型的转换会使索引失效

mysql-sql分析策略及优化的更多相关文章

  1. mysql索引使用策略及优化

    原文地址:http://blog.codinglabs.org/articles/theory-of-mysql-index.html 索引使用策略及优化 MySQL的优化主要分为结构优化(Schem ...

  2. mysql 索引使用策略及优化

    索引使用策略及优化 MySQL的优化主要分为结构优化(Scheme optimization)和查询优化(Query optimization).本章讨论的高性能索引策略主要属于结构优化范畴.本章的内 ...

  3. MySQL SQL分析(SQL profile)

    分析SQL优化运营开销SQL的重要手段.在MySQL数据库.可配置profiling参数启用SQL分析.此参数可以在全局和session水平集.级别则作用于整个MySQL实例,而session级别紧影 ...

  4. mysql sql 分析

    一.SQL 执行时间分析通过找到执行时间长的 SQL 语句,可以直观的发现数据层的效率问题. 1.通过 show processlist 来查看系统的执行情况mysql> show proces ...

  5. Mysql sql语句技巧与优化

    一.常见sql技巧 1.正则表达式的使用 2.巧用RAND()提取随机行 mysql数据库中有一个随机函数rand()是获取一个0-1之间的数,利用这个函数和order by一起能够吧数据随机排序, ...

  6. MySQL定期分析检查与优化表

    定期分析表   ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name]   本语句用于分析和存储表的关键字分布.在分析期间,使 ...

  7. mysql sql 百万级数据库优化方案

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  8. SQL优化 MySQL版 -分析explain SQL执行计划与笛卡尔积

    SQL优化 MySQL版 -分析explain SQL执行计划 作者 Stanley 罗昊 [转载请注明出处和署名,谢谢!] 首先我们先创建一个数据库,数据库中分别写三张表来存储数据; course: ...

  9. SQL优化 MySQL版 -分析explain SQL执行计划与Type级别详解

    type索引类型.类型 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 注:看此文章前,需要有一定的Mysql基础或观看上一篇文章,该文章传送门: https://www.cnblo ...

随机推荐

  1. M5310-A 版本

         模块外表            型号                           BAND                          M5310-A MBRH0S04 +NB ...

  2. 高级UI组件

    1.进度条 (1).圆形进度条(一般默认为圆形进度条) <ProgressBar android:layout_width="wrap_content" android:la ...

  3. POJ 3253 Fence Repair 贪心 优先级队列

    Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 77001   Accepted: 25185 De ...

  4. 全面了解Java中的15种锁概念及机制!

    在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 1.公平锁 / 非公平锁 2.可重入锁 / 不可重入锁 3.独享锁 / 共享锁 4.互斥锁 / 读 ...

  5. 使用scrapy框架爬取图片网全站图片(二十多万张),并打包成exe可执行文件

    目标网站:https://www.mn52.com/ 本文代码已上传至git和百度网盘,链接分享在文末 网站概览 目标,使用scrapy框架抓取全部图片并分类保存到本地. 1.创建scrapy项目 s ...

  6. P5443 [APIO2019]桥梁 [分块+并查集]

    分块+并查集,大板子,没了. 并查集不路径压缩,可撤销,然后暴力删除 这样对于每个块都是独立的,所以直接搞就行了. 然后块内修改操作搞掉,就是单独的了 // powered by c++11 // b ...

  7. 安卓自定义View实例-----跟随手指移动的鸟

    今天学习了一些安卓开发中的自定义布局,编写了简单一个实例,“跟随手指移动的鸟”,需要两张图片,背景图片和鸟的图片,鸟的图片可以在屏幕中跟随手指的移动而移动. 1.将两张图片导入到mipmap中: 2. ...

  8. codechef Chef at the River

    难度 \(hard\) 题意 官方中文题意 做法 设\(G=(V,E)\) 定义1:\(M(G)\)为\(G\)的最小点覆盖 定义2:\(ans(G)\)为\(G\)的题意答案,不考虑船夫 结论1:\ ...

  9. ArcGIS JavaScript API with jQuery: Error: multipleDefine

    I would like to use ArcGIS JavaScript API 4.3 with jQuery, but I am getting following errors.  I sea ...

  10. Linux教程-修炼

    在2020这个特殊的时期,在家就是为国家做贡献!一切都会好起来的,加油中国!! Linux 第1章 Linux 简介 1.1 为什么要学习Linux 1.2 Linux是什么 1.3 Linux 与 ...