Mysql-sql模糊查询,sql优化日常

Mysql 1、模糊查询          2、联表查询优化

1、模糊查询

  1. LIKE
    SELECT * FROM ms_fans WHERE nick_name LIKE ‘%demo%’ LIMIT 0,100
    like ‘%XX%’ 不能使用索引
    在这里插入图片描述
    like ‘XX%’ 可使用字段索引,查询效率快

    在这里插入图片描述

  2. LOCATE
    SELECT * FROM ms_fans WHERE LOCATE(‘demo’,nick_name)>0 LIMIT 0,100
    locate同样不能使用索引,40万数据中查询效率与like相差无几
    在这里插入图片描述

  3. POSITION
    SELECT * FROM ms_fans WHERE POSITION(‘demo’ IN nick_name) LIMIT 0,100
    position同样不能使用索引
    在这里插入图片描述
    除了LIKE 'XX%'可使用索引,查询效率最快,其他几个模糊查询,效率都差不多

2、统计sql优化

前景:

  1. 以一表为主表,关联其他子表进行统计查询,表数据量大(百万)
  2. (主表百万) 查询时进行时间排序等系列操作

思路:关联查询时,进行排序等操作,mysql会在联表查询完毕后,进行排序等操作,使用EXPLAIN解析sql,可以看到,查询完毕后,进行时间等排序,还会对主表进行全表扫描,导致sql执行非常慢。
select * from XXX order by XX
单标进行排序查询时,数据量百万级这个sql也很快。
因此,可以在联表查询之前,先根据条件,查询出主表-单表数据作为虚拟表,再进行联表查询
例:
select * from
(select id from table limit 12) as foo
left join table2 tb on foo.XX = tb.XX

使用EXPLAIN sql分析可见,再进行联表查询时,主表不再全表扫描

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值