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. imx6ull+debian10 构建静态qt交叉编译环境

    # PC:Ubuntu18.04# GCC: arm-linux-gnueabihf- 7.4.0# 开发板:# imx6ull+debian10(文件系统为野火提供的) # 此处需要编译的是带gst ...

  2. 浅谈python的第三方库——pandas(终)

    作为pandas系列的最终章,本文引出一个数据"复制"问题. 示例如下: 从上图中可以看到:我们对data_pd做了删除一行的操作,但是这并没有改变变量data_pd在内存中的值, ...

  3. 剑指offer-面试题53_1-在排序数组中查找数字-二分查找

    /* 题目: 统计一个数字在排序数组中出现的次数. */ /* 思路: 1.从前往后遍历,时间复杂度O(n). 2.二分查找到目标数字target,向前向后遍历,时间复杂度O(n). 3.利用二分法, ...

  4. 【pycharm基本操作】项目创建、切换、运行、字体颜色设置,常见包的安装步骤

    创建新项目 退出项目 怎样区别虚拟环境和系统环境? 虚拟环境和系统环境切换:进入项目切换解释器 切换项目 创建python目录和文件 代码运行方式一: 还可以这样执行代码方式二: 文件的剪切.复制.删 ...

  5. Uva1639(概率期望/对数处理避免丢失精度)

    Uva1639 题意: 有两个盒子各有n个糖果(n<=200000),每天随机选择一个:选第一个盒子的概率是p(0 ≤ p ≤ 1),第二个盒子的概率为1-p,然后吃掉其中的一颗.直到有一天,随 ...

  6. java遍历统计一个文件夹中所有文件单词出现次数

    思路就是通过递归进行文件遍历,把所有文件夹中的非目录文件都遍历一遍,并判断其中读取到的字符串是不是单词,并对单词进行记录和计数,并在最后进行排序输出,下面是代码: package word; impo ...

  7. mnist识别优化——使用新的fashion mnist进行模型训练

    今天通过论坛偶然知道,在mnist之后,还出现了一个旨在代替经典mnist数据集的Fashion MNIST,同mnist一样,它也是被用作深度学习程序的“hello world”,而且也是由70k张 ...

  8. day6 基础总结和编码方式

    # = 赋值 == 比较值是否相等 is 比较内存地址 li1 = [1, 2, 3] li2 = li1 print(li1 is li2) print(id(li1), id(li2)) #数字, ...

  9. LeetCode 836. 矩形重叠

    题目链接:https://leetcode-cn.com/problems/rectangle-overlap/ 矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左 ...

  10. PAT (Basic Level) Practice (中文)1048 数字加密 (20 分)

    本题要求实现一种数字加密方法.首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 ...