MySQL优化

1,定位慢查询

增、删、改10%,查询90%

数据库引擎

  • MyISAM:不支持事务,用于只读程序提高性能
  • InnoDB:支持ACID事务、行级锁、并发
  • Berkeley DB:支持事务
//设置命令结束符
DELIMITER $$ //创建表
CREATE TABLE emp
(
empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
ename VARCHAR(20) NOT NULL DEFAULT '',
job VARCHAR(9) NOT NULL DEFAULT '',
mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
hiredate DATETIME NOT NULL,
sal DECIMAL(7,2) NOT NULL,
comm DECIMAL(7,2) NOT NULL,
deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0
)ENGINE=MYISAM DEFAULT CHARSET=utf8; //获取随机字符串的存储函数
CREATE FUNCTION rand_string(len INT)
RETURNS VARCHAR(255)
BEGIN
DECLARE char_str VARCHAR(100);
DECLARE return_str VARCHAR(255);
DECLARE i INT;
SET char_str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
SET return_str = '';
SET i = 0;
WHILE i &lt len DO
SET return_str = CONCAT(return_str, SUBSTRING(char_str, FLOOR(1+RAND()*62), 1));
SET i = i + 1;
END WHILE;
RETURN return_str;
END //获取随机4位整数的存储函数
CREATE FUNCTION rand_int()
RETURNS INT(4)
BEGIN
DECLARE i INT DEFAULT 0;
SET i = FLOOR(1 + RAND() * 10000);
RETURN i;
END$$ //批量插入数据的存储过程
CREATE PROCEDURE insert_emp(IN _start INT(10), IN _max_num INT(10))
BEGIN
DECLARE i INT DEFAULT 0;
SET i = 0;
SET autocommit=0; //设置事务不自动提交,但如果是MyISAM(不支持事务)数据库则无效。
WHILE i &lt _max_num DO
SET i = i + 1;
INSERT INTO emp VALUES(_start + i, rand_string(6), 'salesman', 0001, CURDATE(), 2000, 400, rand_int());
END WHILE;
COMMIT;
END$$ //调用存储过程插入5000000条数据
call insert_emp(1, 5000000)$$

MySQL命令

SQL命令 含义
show [session global] status like 'com_insert%'
show [session global] status like 'com_select%'
show status like 'uptime' 显示数据库启动多长时间了
show [session global] status like 'slow_queries'
show [session global] variables like 'long_query_time'
SET [session global] long_query_time=0.5;

定位慢查询

开启慢查询日志,一旦开启后,日志文件的位置在my.ini中找datadir,默认情况下是不会记录慢查询的。

1,关闭当前MySQL服务

net stop mysql

2,启动MySQL并开启慢查询[1]

mysqld --defaults-file=my.ini --long_query_time=0.5 --slow-query-log --log-output=FILE

3, 关闭安全模式

mysqladmin -uroot -p** shut down

或者,如果不想重启数据库,可以在MySQL中执行以下命令,但是对旧的session无效,对新的session才有效。

SET GLOBAL long_query_time=0.5;

SET GLOBAL slow_query_log='ON';

SET GLOBAL log_output='FILE';

SET GLOBAL log_slow_admin_statements='ON';

索引

1,创建索引

create index 索引名 on 表名 (字段名);

2,查看索引

show indexes from 表名;

3,全文索引

create table article (

title varchar(200),

body TEXT,

FULLTEXT(title, body)

) engine=MyISAM charset=utf8;

查询全文索引

select * from article where match(title, body) against('keywords');

查看匹配相关度

select match(title, body) against('keywords') from article;

**Note: **

FULLTEXT类型只在MyISAM引擎中有,InnoDB中没有,MySQL默认使用InnoDB

匹配度超过%50(一半的表数据)的关键字,是不会做全文索引的,这个查询关键字keywords叫停止词(这个特点告诉我们,要做全文索引必须是海量数据)

FULLTEXT不支持中文,需要用sphinx技术去处理中文

4,唯一索引

create table stu(

stuid int primary key,

name varchar(10) unique,

email varchar(50));

create unique index 索引名 on 表名 (字段名)

Note:

主键与唯一索引的区别:

主键索引不能重复、不能为空

唯一索引不能重复、可以为空

explain分析SQL语句

explain select * from 表名 where 条件 \G;

创建复合索引(按照字段1查询时索引被使用,按字段2查询时索引不会被使用)

alter table 表名 add index 索引名 (字段1, 字段2)

Note:

如果用主键去查询,自动会使用主键索引

如果创建的是复合索引,只有左边的可以用,右边的不管用。(不要用组合索引)

在模糊查询时,如果like '%keywords'索引不被使用;like 'keywords%'索引被使用

在条件语句中使用or,or两边的字段都必须要有索引,有一个没有,索引就无法使用。

如果字段是字符型的,查询时必须有''引起来,索引才能使用。

选择MySQL存储引擎

MyISAM
不支持事务处理
查询和添加效率高
碎片多
论坛

碎片整理

optimize table 表名

InnoDB
支持事务
保存比较重要的信息
Memory
数据频繁更改,而且不需要在数据库中永久保存
Sesion入库

http://dev.mysql.com/doc/refman/5.6/en/server-options.html

http://dev.mysql.com/doc/refman/5.6/en/log-destinations.html

http://dev.mysql.com/doc/refman/5.6/en/mysqld-option-tables.html


  1. MySQL5.6启动参数 ↩︎

MySQL 慢查询的更多相关文章

  1. Linux下MySQL慢查询分析mysqlsla安装使用

    说明: 操作系统:CentOS 5.X 64位 MySQL版本:mysql-5.5.35 MySQL配置文件:/etc/my.cnf MySQL 数据库存放目录:/data/mysql 实现目的:开启 ...

  2. MySQL的查询计划中ken_len的值计算

    本文首先介绍了MySQL的查询计划中ken_len的含义:然后介绍了key_len的计算方法:最后通过一个伪造的例子,来说明如何通过key_len来查看联合索引有多少列被使用. key_len的含义 ...

  3. mysql的查询、子查询及连接查询

    >>>>>>>>>> 一.mysql查询的五种子句         where(条件查询).having(筛选).group by(分组). ...

  4. MySQL慢查询日志总结

    慢查询日志概念 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志 ...

  5. 【转】Mysql联合查询union和union all的使用介绍

    Mysql的联合查询命令UNION和UNION ALL,总结了使用语法和注意事项,以及学习例子和项目例子,需要的朋友可以参考下 一.UNION和UNION ALL的作用和语法 UNION 用于合... ...

  6. mysql慢查询日志分析工具 mysqlsla(转)

    mysql数据库的慢查询日志是非常重要的一项调优辅助日志,但是mysql默认记录的日志格式阅读时不够友好,这是由mysql日志记录规则所决定的,捕获一条就记录一条,虽说记录的信息足够详尽,但如果将浏览 ...

  7. Mysql慢查询和慢查询日志分析

     Mysql慢查询和慢查询日志分析   众所周知,大访问量的情况下,可添加节点或改变架构可有效的缓解数据库压力,不过一切的原点,都是从单台mysql开始的.下面总结一些使用过或者研究过的经验,从配置以 ...

  8. [django/mysql] 使用distinct在mysql中查询多条不重复记录值的解决办法

    前言:不废话.,直接进入正文 正文: 如何使用distinct在mysql中查询多条不重复记录值? 首先,我们必须知道在django中模型执行查询有两种方法: 第一种,使用django给出的api,例 ...

  9. MySQL 慢查询日志分析及可视化结果

    MySQL 慢查询日志分析及可视化结果 MySQL 慢查询日志分析 pt-query-digest分析慢查询日志 pt-query-digest --report slow.log 报告最近半个小时的 ...

  10. mysql datetime查询异常

    mysql datetime查询异常 异常:Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp (2011 ...

随机推荐

  1. 解决Ubuntu root账户的问题

    问题的提出:在Linux环境下,许多操作需要有管理员权限才能进行.如果没有root权限,就连基本的文件拷贝操作都只能在用户文件夹下进行,而对于Ubuntu系统,安装时是没有设定root帐号的,那么怎样 ...

  2. http://f.dataguru.cn/forum.php?mod=viewthread&tid=44212&fromuid=4771

    http://f.dataguru.cn/forum.php?mod=viewthread&tid=44212&fromuid=4771

  3. NGUI 的使用教程与实例(入门)(1 )

    NGUI教程:步骤1-Scene 1.创建一个新的场景(New Scene).2.选择并删除场景里的MainCamera.3.在NGUI菜单下选择Create a New UI,会打开UI创建向导. ...

  4. 未来 USB Type-C 将可靠软体判断线材是否符合规定

    USB Type-C 插头允许通过的电流和功率比过去常见的 USB 规范要大得多,因此从市面上「随便买一条」USB Type-C 的充电线的危险也同样大得多,毕竟不是所有的线材能承受的电流都一样,万一 ...

  5. Linux伙伴系统1

    (一)--伙伴系统的概述 Linux内核内存管理的一项重要工作就是如何在频繁申请释放内存的情况下,避免碎片的产生.Linux采用伙伴系统解决外部碎片的问题,采用slab解决内部碎片的问题,在这里我们先 ...

  6. 11个强大的Visual Studio调试小技巧(转)

    简介 调试是软件开发周期中很重要的一部分.它具有挑战性,同时也很让人疑惑和烦恼.总的来说,对于稍大一点的程序,调试是不可避免的.最近几年,调试工具的发展让很多调试任务变的越来越简单和省时. 这篇文章总 ...

  7. 安装db2 提示不是有效的win32应用程序?

    问题已经解决了,就是版本的问题.我在官网上下载的最新版本(10.5),网上说是最新的版本不支持xp系统,完了我下了9.7的版本,安装没有一点点问题

  8. poj2723

    把每对钥匙看做一个变量,那两个钥匙看做他的两个状态 每一个开门的要求就是一个条件(xi or xj) 很显然有了2sat的基本要素 2sat是一个判定性问题,而这题求最多能过几个门: 不难想到二分答案 ...

  9. struts1.3异常处理机制

    当Struts的控制器捕获到异常时,在异常处理块中,创建描述异常信息的ActionMessage对象,并放入ActionMessages对象中.然后把ActionMessages对象存放到一定范围内( ...

  10. 【原】spark-submit提交应用程序的内部流程

    我们经常通过spark-submit来提交spark应用程序,那么让我们一起看一下这里面到底发生了什么吧. 知识点: 1.CLI命令行界面启动Spark应用程序 Unix有两种方式:1)spark-s ...