web mysql 查询_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会一直向右匹配直到遇到范围查询(>、

如 select * from tbl_user where uanme='xiariwa' and createdate

由于出现了

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值