一、模糊查询
模糊查询是一种在数据库进行模糊匹配的查询操作,通过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
指定关联条件。在查询结果中,使用别名u
和s
来表示user
表和staff
表。
查询的结果包括user
表的所有列(使用u.*
表示),以及staff
表的id
列(使用别名sid
表示)和
name
列(使用别名sname
表示)。
结果:
这样就查到了我们想要的两张表的信息,再这里因为我user这张表的数据不是很多,所以查的会快一点。
在使用联合索引的时候需要注意,1.要确定索引的顺序,2.不要使用过多的join,会增加维护的成本。