- 问 介绍下数据库分页
原理: 使用LIMIT子句实现分页查询
- 在所有的查询结果中,返回前5行记录。
SELECT prod _name FROM products LIMIT 5;- 在所有的查询结果中,从第5行开
始,返回5行记录。
SELECT prod_ name FROM products LIMIT 5, 5;
优化LIMIT分页:
在偏移量大的时候,例如LIMIT 10000,20. 这是MySQL需要查询10020条记录,只返回最后20条.代价过高,需要优化
- 索引
用索引覆盖扫描,而不是查询所有的列,然后根据需要做一次关联操作再返回所需列
SELECT film.id,description FROM sakila.film ORDER BY title LIMIT 50,5;
若表的数据量非常大,可以使用如下查询
SELECT film.film_id,film.description FROM sakila.film INNER JOIN (SELECT film_id FROM sakila.film ORDER BY title LIMIT 50,5) AS lim USING(film_id)
- 问 说一说数据库的左连接和右连接
答:
- 左外连接:可以简称为左连接(LEFT JOIN),它会返回左表中的所有记录和右表中满足连接条件的记录
- 右外连接: 可以简称为右连接(RIGHT JOIN),它会返回右表中的所有记录和左表中满足连接条件的记录.
- 问 where和having有什么区别?
答: where是一个约束声明.使用where约束来自数据库的数据.where是在结果返回之前起作用的,where中不能使用聚合函数.
having是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在having中可以使用聚合函数. 另一方面,having子句中不能使用除了分组字段和聚合函数之外的其他字段.
从性能角度来说,having子句中如果使用了分组字段作为过滤条件,应该替换成where子句,因为where可以在执行分组操作和计算聚合函数之前过滤掉不需要的数据,性能会更好
网友评论