MySQL笔记

内容整理在GitHub,地址https://github.com/Muscleape/TestDemoProjects

MySQL分页查询

limit的用法mysql

  • limit子句能够被用于强制select语句返回指定的记录数;
  • 接受1个或2个整数常量作参数,第一个是返回记录行的偏移量,第二个是返回记录行的最大数目
-- 检索记录行6~15;
mysql> SELECT * FROM table LIMIT 5,10;
-- 从某个偏移量到记录集的最后,能够指定第二个参数为-1;
mysql> SELECT * FROM table LIMIT 95,-1;
-- 若是只给定一个参数,表示返回的做答记录行数目;
mysql> SELECT * FROM table LIMIT 5; 
-- LIMIT n 等价于 LIMIT 0,n;

MySQL分页查询语句的性能分析git

  • 确保使用索引,下列语句中在ta_id和id两列上创建索引
mysql> SELECT * FROM ta WHERE ta_id = 111 ORDER BY id LIMIT 50,10;
  • 使用子查询,随着数据量增长,越日后LIMIT语句的偏移量就会越大,速度会明显变慢;
-- 使用子查询以前,偏移量为10000;
mysql> SELECT * FROM ta WHERE ta_id = 123 ORDER BY id LIMIT 10000, 10;
-- 使用子查询以后;
mysql>
SELECT * FROM ta WHERE id >=
(SELECT id FROM ta WHERE ta_id = 111 ORDER BY id LIMIT 10000,1)
LIMIT 10;

大数据量的MySQL表,LIMIT分页存在严重的性能问题:github

优化方式:sql

  • 使用子查询
  • 利用相似策略模式处理分页,判断100页之内使用基本的分页方式,100页以上使用子查询的分页方式;
  • 使用有索引的列或主键列进行order by操做
  • 记录上次返回的主键,下次查询时使用主键过滤
  • 为了保证index索引列连续,能够为每一个表增长一个自增的字段,而且加上索引
相关文章
相关标签/搜索