WEB开发,常见MySQL 查询优化

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)函数运算:在索引列上进行函数运算,索引会失效.


扫描二维码关注公众号,回复: 945713 查看本文章
3.常见优化场景
(1)主键连续,改limit查询为范围查询。
    如 limit 10000,100 改成between 100000 and 1000100;

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

猜你喜欢

转载自blog.csdn.net/u011625492/article/details/78540159
今日推荐