详解MySQL的limit用法和分页查询语句的性能分析
16lz
2022-01-01
limit用法
在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。
SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.
mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行
Mysql的分页查询语句的性能分析
MySql分页sql语句,如果和MSSQL的TOP语法相比,那么MySQL的LIMIT语法要显得优雅了许多。使用它来分页是再自然不过的事情了。
最基本的分页方式:
SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ...
复制代码 代码如下:
随着数据量的增加,页数会越来越多,查看后几页的SQL就可能类似:
复制代码 代码如下:
此时,我们可以通过子查询的方式来提高分页效率,大致如下:
SELECT * FROM articles WHERE id >= (SELECT id FROM articles WHERE category_id = 123 ORDER BY id LIMIT 10000, 1) LIMIT 10
SELECT * FROM `content` AS t1 JOIN (SELECT id FROM `content` ORDER BY id desc LIMIT ".($page-1)*$pagesize.", 1) AS t2 WHERE t1.id <= t2.id ORDER BY t1.id desc LIMIT $pagesize;
id select_type table type possible_keys key key_len ref rows Extra1 PRIMARY <derived2> system NULL NULL NULL NULL 1 1 PRIMARY t1 range PRIMARY PRIMARY 4 NULL 6264 Using where2 DERIVED content index NULL PRIMARY 4 NULL 27085 Using index
实际可以利用类似策略模式的方式去处理分页,比如判断如果是一百页以内,就使用最基本的分页方式,大于一百页,则使用子查询的分页方式。
更多相关文章
- Android(安卓)-- Android(安卓)JUint 与 Sqlite
- android 当系统存在多个Launcher时,如何设置开机自动进入默认的La
- Android(安卓)SQLiteDatabase的使用
- android 通话记录次数
- Android(安卓)SQLiteDatabase的使用
- android分页查询获取系统联系人信息
- android实现关键字搜索功能
- 我的android 第14天 - 使用SQLiteDatabase操作SQLite数据库
- Android(安卓)编码规范