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);;

WEB开发,常见MySQL 查询优化

WEB 开发,MySQL常见sql查询语句优化
  • u011625492
  • u011625492
  • 2017-11-15 14:11:17
  • 61

MySQL学习之——索引(普通索引、唯一索引、全文索引、索引匹配原则、索引命中等)

在上一篇博客中,我们主要探讨了关于MySQL锁的一些问题。这一次,我们主要来聊聊,MySQL中的索引。 MySQL是目前绝大多数互联网公司使用的关系型数据库,它性能出色、资源丰富、成本低廉,是快速搭建...
  • mysteryhaohao
  • mysteryhaohao
  • 2016-06-20 13:58:06
  • 5688

MySQL查询优化的几种思路和方法

整理的一些mysql查询存储的优化思路和方法
  • RonghuiMO
  • RonghuiMO
  • 2017-03-08 20:44:40
  • 693

MySQL的几种优化方法

没索引与有索引的区别优点: 当表中有大量记录时,若要对表进行查询,如果没用建立索引,搜索信息方式是全表搜索,是将所有记录一一取出,和查询条件进行一一对比,然后返回满足条件的记录,这样做会消耗大量数据...
  • u013474436
  • u013474436
  • 2015-11-18 16:13:12
  • 7162

MySQL查询优化小结

1.MySQL索引原理 1.1 索引目的 索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从上往下找到y字母,再找到剩下的sql。如果没有索引,...
  • John8169
  • John8169
  • 2017-04-04 21:01:47
  • 409

MySQL索引

一、基础知识 http://database.51cto.com/art/200910/156685.htm 1. mysql索引     索引是帮助高效查询的数据结构,MySQL索引的建立对于...
  • wangzaizhen2009
  • wangzaizhen2009
  • 2016-03-14 16:38:01
  • 195

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

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

Mysql优化的一般步骤

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

mysql between and 遇到日期查询边界问题

最近实现一个按日期范围查询列表,例如输入的是日期 2015-11-01到2015-11-03,想得到1号到3号的数据, 执行 select * from table where create_dat...
  • hchaoyangming
  • hchaoyangming
  • 2015-11-03 18:23:29
  • 15920

MySQL 索引及查询优化

1. MySQL索引的原理 1.1 索引目的 索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql...
  • ltx06
  • ltx06
  • 2016-07-14 18:14:43
  • 391
收藏助手
不良信息举报
您举报文章:WEB开发,常见MySQL 查询优化
举报原因:
原因补充:

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