1.开启慢查询

在mysql的配置文件my.ini最后增加如下命令

[mysqld]
port=3306
slow_query_log =1
long_query_time = 1

2.查看慢查询记录

默认是放在mysql的data目录,并且文件名为host_name-slow.log即 主机名-slow.log

3.mysql查询缓存

在每次mysql重启后,保存的缓存都会丢失,关于缓存的设置也会丢失,所以每次使用缓存前要设置:

set session query_cache_type = ON; --开启查询缓存

set global query_cache_size = 600000; --设置缓存内存大小

set global query_cache_limit = 100000; 设置当搜索结果大于1M时不保存

查询缓存相关设置

mysql> show variables like '%query_cache%';

查看缓存的状态

mysql> show status like '%Qcache%';

--Qcache_hits表示sql查询在缓存中命中的累计次数,是累加值。

mysql> SHOW STATUS LIKE 'Qcache_hits';

4.索引类型

4.1 主键索引(primary)

在创建表的时候,把主键设置为递增,那么这个就是主键索引

添加:后期添加主键索引 : alter table 表名 add primary key (字段名)

创建表的时候指定主键

4.2 唯一索引(unique)

唯一索引可以作用在任何字段上,unique,字段内容可以为空null,如果有内容,那么就不能重复

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

4.3 普通索引(normal)

一般来说,普通索引的创建是先创建表,然后再创建普通索引

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

4.4 全文索引(fulltext)

主要是针对文件,文本的检索;全文索引只针对Myisam引擎,InnoDB不支持

sql语句中不能使用  %like% ,这种用法不会用到全文索引,可以使用explain来分析查看sql语句中是否使用到了全文索引

例子:explain select * from articles where boby like '%kang%';

其中的possible_keys 为null,表示没用用到

正确的用法是

select * from articles where match(title,body) againist(kang);

在title,boby字段中搜索kang这个词,可以使用到全文索引

注:1.mysql中fulltext全文索引只支持英文,针对中文索引使用sphinx

2.只在myisam引擎下生效

3.使用方法match(字段名....) against(关键词)

4.5 针对索引的其他问题

搜索:show index from 表名

索引的代价:

1.磁盘的占用

2.对update,delete,insert操作变慢

索引的使用环境

1.较频繁的作为查询条件字段

2.唯一性太差的字段不适用使用索引,类似 sex='男'、sex='女'这种字段

3.更新比较频繁的字段不适用使用,类似登陆次数

4,sql中有 like 查询以%开头不会使用索引

5.sql中条件里有or,除非用到的条件都添加了索引,否则不会使用索引

6.如果列类型是字符串,那么一定要在条件中将数据用引号括起来

4.6 联合索引

作用非常大,当where 中有多个条件时,并且order by 字段,把这几个字段添加到联合索引中,可以快速提高

优化order by使用联合索引是一个很大的优化,具体参考http://www.jb51.net/article/38953.htm

    4.7 索引sql语句

    /*创建索引*/
    CREATE index nameIndex on demo(name)

    /*删除索引*/
    ALTER TABLE demo DROP INDEX nameIndex

    /*删除主键索引,先去除自动增加,再删除索引*/
    alter table demo modify id int unsigned not null;
    alter table demo drop primary key;

    /*修改为自动增加*/
    alter table demo modify id int unsigned not null auto_increment

5.sql优化技巧

1. group by 分组查询,默认情况下,还会对其他字段的值进行排序,可以取消,后面加上 order by null

select * from user group by name order by null;

2. 在有些情况下,使用join来代替子查询

3.选择合适的存储引擎(myisam,InnoDB)

myisam : 如果表对事务要求不高,而且是以查询和添加为主的 , 多用myisam;比如一些bbs的发帖,回复表

InnoDB : 对事务要求高,保存的数据都是重要数据,建议使用InnoDB,比如订单表,账户表等等

Memory : 数据变化频繁,不需要入库,同时又频繁的查询和修改,建议用Memory(和redis理念差不多)

4.碎片整理: 在使用myisam的存储引擎后,删除数据后,存储数据的文件并没有减少,这说明说句并没有被真               实的删除,所以如果使用myisam引擎后,要定时对myisam进行整理清理垃圾数据;

      optimize table 表名;

6.数据库备份

6.1 手动备份数据库

cmd控制台:mysqldump -u root -p 密码 数据库名 > 文件路径

mysqldump -u -proot demo > d:/demo.sql  //备份整个demo数据库

mysqldump -u -proot demo table1 table2 table3 > d:/demo.sql  //备份demo数据库下的表table1,table2,table3

恢复 :

mysql 控制台:source d:\demo.sql

7.分表

假设要分3个表,把数据分布写到3个表中,user_0,user_1,user_2,现在又1,2,3,4,5,6,7,8,9个用户

则 user_1表中是:1 4 7

user_2表中是:2 5 8

user_3表中是:3 6 9

写入的时候,可以建一个附加表uid来记录最后的一个uid,下次插入数据的时候取uid表中的值,判断接下来要插入到哪一个表中

mysql 慢查询,查询缓存,索引,备份,水平分割的更多相关文章

  1. mysql优化:慢查询分析、索引配置优化

    一.优化概述二.查询与索引优化分析a.性能瓶颈定位show命令慢查询日志explain分析查询profiling分析查询b.索引及查询优化三.配置优化 max_connections back_log ...

  2. 在MySQL中如何使用覆盖索引优化limit分页查询

    背景 今年3月份时候,线上发生一次大事故.公司主要后端服务器发生宕机,所有接口超时.宕机半小时后,又自动恢复正常.但是过了2小时,又再次发生宕机. 通过接口日志,发现MySQL数据库无法响应服务器.在 ...

  3. mysql高级教程(一)-----逻辑架构、查询流程、索引

    mysql逻辑架构 和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用.主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提 ...

  4. mysql 查询表结构 查询索引

    首先进入到mysql里 show databases; 选择数据库 use xxxcms; 查询数据库下的表结构 show create table 表名; 这样看着不太好可以后面加\G show c ...

  5. MySQL数据库学习笔记(六)----MySQL多表查询之外键、表连接、子查询、索引

    本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...

  6. MySQL多表查询之外键、表连接、子查询、索引

    MySQL多表查询之外键.表连接.子查询.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为 ...

  7. MySQL数据库学习笔记----MySQL多表查询之外键、表连接、子查询、索引

    本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...

  8. MySQL查询不使用索引汇总 + 如何优化sql语句

    不使用索引原文 : http://itlab.idcquan.com/linux/MYSQL/918330.html MySQL查询不使用索引汇总 众所周知,增加索引是提高查询速度的有效途径,但是很多 ...

  9. mysql 优化之查询缓存(mysql8已经废弃这个功能)

    对于缓存,一般人想到的是 redis.memcache 这些内存型的缓存. 但是实际上 mysql 也提供了缓存,mysql 里面的缓存是查询缓存,可以把我们查询过的语句缓存下来,下一次查询的时候有可 ...

随机推荐

  1. 《C语言程序设计基础1》第二学期第一周学习总结

    **<C语言程序设计基础1>第二学期第一周学习总结 一. 本周学习内容总结 一维数组,了解了一维数组的定义(定义一个数组,需要明确数组变量名,数组元素的类型和数组大小,即数组中元素的数量) ...

  2. python 内置调试工具 pdb

    除了 pycharm 可以调试python外,python自带的内置工具pdb 也可以调试 python.其命令方式类似于 gdb. pdb 常用的调试命令见下表. 命令 解释 break 或 b 设 ...

  3. 总结安装matlab踩到的坑

    个人安装matlab3次,每次都遇到不同的安装问题,现在将遇到的问题总结下来,以供参考. 本次安装MATLAB的步骤参考的博文 https://blog.csdn.net/u012313335/art ...

  4. node从搭建运行项目整体流程

    1. 初始化配置基本信息: npm init (自定义配置) npm init -y (一切配置采用默认值) 在当前目录产生package.json文件,有一个dependencies用来记录该项目所 ...

  5. 20155239 2016-2017-2 《Java程序设计》第9周学习总

    教材学习内容 JDBC 简单功能 连接数据源,如数据库 传给数据库查询和更新指令 获取并处理数据库返回结果(对查询等的响应) public void connectDBAndQuery(String ...

  6. 20155322 2016-2017-2 《Java程序设计》第三周学习总结

    20155322 2016-2017-2 <Java程序设计>第三周学习总结 教材学习内容总结 本周学习的内容主要为教材的第四第五章,下面是总结: 第四章 主要讨论了五个问题:类与对象.基 ...

  7. 从码云把之前的代码git push 回IDEA 对IDEA里的文件进行简单操作

    前情提要:我的IDEA里的项目之前已经和码云连接成功可以上传.但我直接在电脑文件夹里对文件进行重命名.剪切.粘贴等操作之后IDEA对操作后的文件不识别,无奈之下我将码云上之前的代码推回重新新建了项目. ...

  8. day5 RHCE

    19 .配置 iSCSI 服务端  (***先做这个题目**,挂载重启,机器会挂掉) 配置server0提供一个iSCSI服务磁盘名为iqn.2014-11.com.example:server0,并 ...

  9. vue 与原生app的对接交互(混合开发)

    小伙伴们在用vue开发h5项目特别是移动端的项目,很多都是打包后挂载在原生APP上的,那就少不了与原生交互了,我最近就是在坐这个,踩了一些坑,拿出来给大家分享下. 0.通过url传输数据:(一般是在入 ...

  10. Vue视图

    1. 基本模板语法 1.1 插值 文本 数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值 v-text 指令也可以用于数据绑定,如果要更新部分的 textContent ...