1,需求:如何在一个项目中,找到慢查询的select,mysql数据库支持把慢查询语句,记录到日志中。供程序员分析。(默认不启用此功能,需要手动启用)

修改my.cnf文件(有些地方是my.ini)  

增加或修改参数slow_query_log 和slow_query_log_file后,然后重启MySQL服务器,如下所示

slow_query_log =1

slow_query_log_file=/tmp/mysql_slow.log

2,使用索引的优缺点

优点:

(1)通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。

(2) 可以大大加快数据的检索速度,这也是创建索引的最主要的原因。

(3)可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。

(4)在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

(5)通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

缺点:

(1) 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。

(2)索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。

(3)当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

3,分析sql执行效率,通过explain可以知道mysql是如何处理语句,分析出sql执行过程中遇到的瓶颈。

explain select * from news;

id 1  
select_type SIMPLE 表示sql语句可能使用到的索引,如果没有使用,就写simple
table news 表示sql语句中涉及数据表,多表查询,显示多个数据表
type ALL

表示对数据表访问方式,(1)ALL表示全表扫描;(2)system表示仅有一行(=系统表),这是const连接类型的一个特例;(3)const表示最多有一个匹配行;
如果使用索引,此处值是const,表示非全表扫描

possible_keys \N 表示可能用到的索引
key \N 表示实际用到的索引
key_len \N 表示索引长度
ref \N 表示索引的哪一列被使用了,如果可能的话,是一个常数const的值
rows 2 表示从多少行中取出
Extra \N

表示关于mysql如何解析查询的额外信息。比如

(1) no tables,sql中不用数据库,explain select max(10) from news;

(2) using filesort,使用文件排序,通常Query中包含ORDER BY操作,而且无法利用索引完成排序。explain select * from news order by title;

(3) using temporary,某些操作必须使用临时表,常见GROUP BY,ORDER BY

(4) Using where,不用读取表中所有信息,仅通过索引就可以获取所需数据。

三,mysql优化--sql语句优化之索引一的更多相关文章

  1. mysql的sql语句优化方法面试题总结

    mysql的sql语句优化方法面试题总结 不要写一些没有意义的查询,如需要生成一个空表结构: select col1,col2 into #t from t where 1=0 这类代码不会返回任何结 ...

  2. php面试专题---MySQL常用SQL语句优化

    php面试专题---MySQL常用SQL语句优化 一.总结 一句话总结: 原理,万变不离其宗:其实SQL语句优化的过程中,无非就是对mysql的执行计划理解,以及B+树索引的理解,其实只要我们理解执行 ...

  3. MySQL之SQL语句优化

    语句优化 即优化器利用自身的优化器来对我们写的SQL进行优化,然后再将其放入InnoDB引擎中执行. 条件简化 移除不必要的括号 select * from x where ((a = 5)); 上面 ...

  4. MySQL常用SQL语句优化

    推荐阅读这篇博文,索引说的非常详细到位:http://blog.linezing.com/?p=798#nav-3-2 在数据库日常维护中,最常做的事情就是SQL语句优化,因为这个才是影响性能的最主要 ...

  5. 五,mysql优化——sql语句优化小技巧

    1,大批量插入数据 (1)对于MyISAM: alter table table_name disable keys; loading data; alter table table_name ena ...

  6. MySQL 数据库--SQL语句优化

    explain查询和分析sql 开发中,为满足一业务功能,使用mysql书写sql时,一条sql往往有多种写法,那么我们就需要选择执行效率比较高的sql. 因此要比较分析sql的执行过程,且同一条sq ...

  7. Mysql的Sql语句优化

    在Mysql中执行Sql语句经常会遇到有的语句执行时间特别长的情况,出现了这种情况我们就需要静下心分析分析. 首先,我们需要确定系统中哪些语句执行时间比较长.这个可以使用Mysql的慢日志来跟踪.下面 ...

  8. 四,mysql优化——sql语句优化之索引二

    1,在什么列适合添加索引 (1)较频繁的作为查询条件字段应该添加索引 select * from emp where empid = 2; (2)唯一性太差的字段不适合添加索引,即时频繁作为查询条件. ...

  9. 千万级大数据的Mysql数据库SQL语句优化

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

随机推荐

  1. PowerDesigner :

    P:是否为主键: F:是否为外键: M:表示强制非空: D:是否在模型中显示 修改样式.字体.颜色.等:Tools->Display Preferences->Format-> Po ...

  2. laravel-excel文档翻译笔记

    1.安装      1>composer 安装 "maatwebsite/excel": "~2.1.0"      2>app/config/ap ...

  3. 检查Makefile中的tab

    转:http://stackoverflow.com/questions/16931770/makefile4-missing-separator-stop makefile has a very s ...

  4. spring 3 mvc 的 @ResponseBody返回数据中文乱码

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter&q ...

  5. 2018.09.16 bzoj3757: 苹果树(树上莫队)

    传送门 一道树上莫队. 先用跟bzoj1086一样的方法给树分块. 分完之后就可以莫队了. 但是两个询问之间如何转移呢? 感觉很难受啊. 我们定义S(u,v)" role="pre ...

  6. 一种基于Redis的10行代码实现IP频率控制方法

    优点:可支持海量访问的频率控制,只需要增加Redis机器,单个Redis节点(只占用一个cpu core)即可支持10万/s以上的处理. 基于IP频率限制是种常见需求,基于Redis可以十分简单实现对 ...

  7. HTML中submit和button的区别

    submit是button的一个特例,也是button的一种,它把提交这个动作自动集成了. 如果表单在点击提交按钮后需要用JS进行处理(包括输入验证)后再提交的话,通常都必须把submit改成butt ...

  8. mac下svn无法上传.a文件的问题

    Xcode自带的svn和Versions以及一些其它工具都默认ignore".a"文件. 解决办法有两个: 方法一:使用命令行添加文件([转]原文在这) 1.打开终端,输入cd,空 ...

  9. jsPlumb学习笔记

    这就是一个给元素画连接线的工具. <!DOCTYPE html> <html> <head> <title>jsPlumb</title> ...

  10. Linux内存子系统及常用调优参数

    1>内存子系统 1>组件: slab    allocator buddy    system kswapd pdflush 2>虚拟化环境: PA:进程地址: HA:虚拟机地址: ...