WEB开发,常见MySQL 查询优化

原创 2017年11月15日 14:11:17
MySql sql 常用优化点

1.查找优化点:查看sql语句的执行计划

    比如 explain select * from tbl_user where id=1

    id | select_type|table|type|possible_kes|key|key_len|ref|rows|Extra

    1|SIMPLE|tbl_user|const|PRIMARY|PRIMARY|4|const|1|null


    简单解释:
        id:select操作表的顺序,顺序从大到依次执行.
        select_type :选择的类型,如: SIMPLE(简单的)
        type :访问类型。ALL(全表扫描),index(索引扫描),range(范围扫描),
             ref (非唯一索引扫描),eq_ref(唯一索引扫描),const(常数引用) 速度依次由慢到快。
        table :查询的表
        possible_keys :查询语句,可能走的索引(不一定是真实的)。
        key :显示MySQL实际使用的索引,包括主键索引,或者自建索引的名字。
        key_len :索引所使用的字节数
        ref :连接匹配条件,若走主键索引值为const, 全表扫描为null值
        rows :扫描行数,通常情况下,rows越小,效率越高, 这是优化点。
        Extra:包含执行SQL时的真实情况,比如”using where”,表示使用where筛选得到的值


2.建索引注意点
(1)选择区分度很高的列上见索引。

    参考:(公式 q=count(distinct(column)/count(*), 0<=q<=1,q=1最合适建索引))


(2)联合索引(多列建立索引) 比如 alter table tbl_user add index idx_uname_phone(uname,phone);

        (2-1)最左前缀匹配原则: MySQL会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配.

        如 select * from tbl_user where uanme='xiariwa' and createdate<"2017-11-15" and phone='13819831231'

                 由于出现了<号,后面的phone 就不会走索引。

        (2-2)函数运算:在索引列上进行函数运算,索引会失效.


3.常见优化场景
(1)主键连续,改limit查询为范围查询。
    如 limit 10000,100 改成between 100000 and 1000100;

(2)防止数据类型隐式转换。将参数值改成与表中列数据类型一致。
   phone 数据库保存的是char类型,而传入的是数字,应该这样转换,才会走索引
   select * from tbl_user where phone=cast(13819831231 as char);;

Mysql优化的一般步骤

一、数据库设计要合理 表的设计要符合3NF,有时需要适当的逆范式 1NF为属性的原子性约束,只要是关系型数据库均满足1NF。2NF对记录的唯一性约束,要求记录有唯一的标识(主键)。3NF在满足2...
  • lisongjia123
  • lisongjia123
  • 2016年04月17日 19:02
  • 726

mysql查询优化需要注意的20点

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据...
  • bravekingzhang
  • bravekingzhang
  • 2014年02月11日 16:40
  • 14098

MySQL数据库优化(五)——MySQL查询优化

一、mysql查询类型(默认查询出所有数据列) 1、内连接       默认多表关联查询方式,查询出两个表中所有字段;可省略inner join 关键字 2、外连接 查询出某一张表中的所有数据 ...
  • Daybreak1209
  • Daybreak1209
  • 2016年06月11日 21:30
  • 1765

MySQL 处理海量数据时的一些优化查询速度方法

在参与实际项目中,当 MySQL 表的数据量达到百万级时,普通的 SQL 查询效率呈直线下降,而且如果 where 中的查询条件较多时,其查询速度无法容忍。想想可知,假如我们查询淘宝的一个订单详情,如...
  • test_soy
  • test_soy
  • 2017年05月02日 11:24
  • 1110

MySQL in查询优化<一>

开发说他写了个SQL特别慢,让看看。 select * from t_channel where id_ in(select distinct cdbh from sjkk_gcjl where jg...
  • gua___gua
  • gua___gua
  • 2015年08月10日 17:57
  • 3971

Mysql查询性能优化-善用Explain语句

Mysql查询性能优化-善用Explain语句     在项目中验证sql语句执行效率的时候最直观的方式就是查看其执行时间,但是在线上环境中如果不慎运行一个效率十分低下的sql导致数据库down掉了,...
  • u012091092
  • u012091092
  • 2016年11月28日 14:50
  • 2366

mysql in 子查询 效率慢 优化(转)

使用MYSQL不久,写了几个多表查询,发现子查询速度比join查询慢很多,看了下面的文章明白了些原理。 from:http://www.cnblogs.com/xh831213/archive/20...
  • hotdust
  • hotdust
  • 2016年05月19日 09:46
  • 2195

MySQL5.6 如何优化慢查询的SQL语句 -- SQL优化

MySQL5.6 如何优化慢查询的SQL语句 -- SQL查询慢日志分析工具和SQL语句执行计划分析...
  • cloud_ll
  • cloud_ll
  • 2014年10月12日 12:30
  • 4422

mysql in 查询效率慢优化

mysql> select * from abc_number_prop where number_id in (select number_id from abc_number_phone wher...
  • FENGQIYUNRAN
  • FENGQIYUNRAN
  • 2017年02月19日 21:40
  • 1618

Mysql查询优化——Explain使用

The palest ink is better than best memory——好记性不如烂笔头。2012补记 一、关键词SQL优化、执行计划、explain、using filesort、us...
  • LoveJavaYDJ
  • LoveJavaYDJ
  • 2016年12月20日 19:18
  • 1192
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WEB开发,常见MySQL 查询优化
举报原因:
原因补充:

(最多只允许输入30个字)