sql语句优化

一、模糊查询

模糊查询是一种在数据库进行模糊匹配的查询操作,通过LIKE关键字和通配符来查询。

SELECT 列名 FROM 表名 WHERE 列名 LIKE '模式';

这里我们有一张plan的表,有一千万条数据,我们来实验下模糊查询需要多久的时间。

 这个是plan这张表的字段的名字。

第一条sql语句:select * from plan where id like '%1%'  

 第二条sql语句:select * from plan where id like '%1' 

第三条sql语句:select * from plan where id like '1%'   

大家可以看到查询的时间从上到下,是越来越快的,三条sql语句的区别就是在于通配符%。

第一条查询语句是在匹配id列中包含1的任意位置的字符序列,第二条查询语句是在匹配id列中以1

结尾的字符序列,第三条查询语句是在匹配id列中以1开头的字符序列。

这里每次查询另外一个sql语句的时候,都会先换一个条件查一下再重新查一遍,考虑到了缓存的

问题。然后这里还会存在一个问题,如果我们的id以1开头的数比较多的情况下,当我们用

EXPLAIN select * from plan where id like '1%'    来看结果的时候会是ALL,没有用到索引,这可能

是因为MySQL认为全表扫描可能效率会更高,这个是猜测,所以用模糊查询需要注意查询的数量

还有缓存的问题。

二、联表查询

联表查询是指在查询语句中使用多个表,并通过关联条件将它们连接在一起,以获取与关联条件相

匹配的数据。用到了INNER JOIN、on等关键字。

SELECT 列名 FROM 表1 JOIN 表2 ON 关联条件 WHERE 条件

这里我们先假设有两张表staff和user两张表

这里我们是通过user表中的staff_id和staff表中的id相关联的。

select u.*,s.id as sid,s.`name` as sname from user u INNER JOIN staff s on u.staff_id = s.id WHERE u.staff_id = 1

这句sql语句的意思是:

通过u.staff_id = s.id指定关联条件。在查询结果中,使用别名us来表示user表和staff表。

查询的结果包括user表的所有列(使用u.*表示),以及staff表的id列(使用别名sid表示)和

name列(使用别名sname表示)。

结果:

 这样就查到了我们想要的两张表的信息,再这里因为我user这张表的数据不是很多,所以查的会快一点。

在使用联合索引的时候需要注意,1.要确定索引的顺序,2.不要使用过多的join,会增加维护的成本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值