免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 8161 | 回复: 27
打印 上一主题 下一主题

请教mysql倒着查询怎么做 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-08-29 16:06 |只看该作者 |倒序浏览
比如 select * from my_table limit 0,100;
可以取前100行数据。

但是想要取后100行数据应该怎么写呢?
主键是自动递增的ID

我现在的做法是先
select count(*) from my_table;
这一步很快

然后根据得到的结果,比如1000
select * from my_table where ID > 900;
这一步很慢,好像没有用到索引。

求指教,第二步有没有好的写法用到索引?
有没有类似顺序limit的语法只用一步实现这个需求?
谢谢!

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
2 [报告]
发表于 2014-08-29 16:58 |只看该作者
select * from (select * from my_table order by my_id desc limit 100) as t order by t.my_id

论坛徽章:
8
CU大牛徽章
日期:2013-09-18 15:20:48CU大牛徽章
日期:2013-09-18 15:20:58CU大牛徽章
日期:2013-09-18 15:21:06CU大牛徽章
日期:2013-09-18 15:21:12CU大牛徽章
日期:2013-09-18 15:21:17天秤座
日期:2013-10-30 14:01:03摩羯座
日期:2013-11-29 18:02:31luobin
日期:2016-06-17 17:46:36
3 [报告]
发表于 2014-08-29 23:02 |只看该作者
@robert_wjj
select * from my_tabel where id > 9000 order by id limit 100; //如果ID是索引,应该是可以用到索引的。

论坛徽章:
0
4 [报告]
发表于 2014-09-01 10:08 |只看该作者
好像都不行
mysql> select count(*) from data_ordq;
+----------+
| count(*) |
+----------+
| 42838856 |
+----------+
1 row in set (0.00 sec)

mysql> select * from(select * from data_ordq order by id desc limit 5) as t order by t.id;
+----------+--------------------------+------------+--------+------------+----------+-------+---------+---------+----------+
| ID       | recvTime                 | szWindCode | szCode | nActionDay | nTime    | nSide | nPrice  | nOrders | nABItems |
+----------+--------------------------+------------+--------+------------+----------+-------+---------+---------+----------+
| 42838852 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
| 42838853 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
| 42838854 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
| 42838855 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
| 42838856 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
+----------+--------------------------+------------+--------+------------+----------+-------+---------+---------+----------+
5 rows in set (5.83 sec)

mysql> select * from data_ordq where id > 42838851 order by id limit 5;
+----------+--------------------------+------------+--------+------------+----------+-------+---------+---------+----------+
| ID       | recvTime                 | szWindCode | szCode | nActionDay | nTime    | nSide | nPrice  | nOrders | nABItems |
+----------+--------------------------+------------+--------+------------+----------+-------+---------+---------+----------+
| 42838852 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
| 42838853 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
| 42838854 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
| 42838855 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
| 42838856 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
+----------+--------------------------+------------+--------+------------+----------+-------+---------+---------+----------+
5 rows in set (2.03 sec)

mysql> select * from data_ordq where id > 42838851;
+----------+--------------------------+------------+--------+------------+----------+-------+---------+---------+----------+
| ID       | recvTime                 | szWindCode | szCode | nActionDay | nTime    | nSide | nPrice  | nOrders | nABItems |
+----------+--------------------------+------------+--------+------------+----------+-------+---------+---------+----------+
| 42838852 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
| 42838853 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
| 42838854 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
| 42838855 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
| 42838856 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
+----------+--------------------------+------------+--------+------------+----------+-------+---------+---------+----------+
5 rows in set (2.06 sec)

mysql> select * from data_ordq  where id in (42838852, 42838853, 42838854, 42838855, 42838856);
+----------+--------------------------+------------+--------+------------+----------+-------+---------+---------+----------+
| ID       | recvTime                 | szWindCode | szCode | nActionDay | nTime    | nSide | nPrice  | nOrders | nABItems |
+----------+--------------------------+------------+--------+------------+----------+-------+---------+---------+----------+
| 42838852 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
| 42838853 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
| 42838854 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
| 42838855 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
| 42838856 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
+----------+--------------------------+------------+--------+------------+----------+-------+---------+---------+----------+
5 rows in set (0.00 sec)

论坛徽章:
0
5 [报告]
发表于 2014-09-01 10:12 |只看该作者
本帖最后由 robert_wjj 于 2014-09-01 10:26 编辑

上面好像只有最后一种查询用到了索引,非常快就出来了(虽然结果不合题意)。
mysql> select * from data_ordq where id > 42838851  limit 5;
+----------+--------------------------+------------+--------+------------+----------+-------+---------+---------+----------+
| ID       | recvTime                 | szWindCode | szCode | nActionDay | nTime    | nSide | nPrice  | nOrders | nABItems |
+----------+--------------------------+------------+--------+------------+----------+-------+---------+---------+----------+
| 42838852 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
| 42838853 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
| 42838854 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
| 42838855 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
| 42838856 | 20140820:09:32:30:189521 | 112164.SZ  | 112142 |   20140820 | 93223000 |    66 | 1007090 |       1 |        2 |
+----------+--------------------------+------------+--------+------------+----------+-------+---------+---------+----------+
5 rows in set (2.06 sec)

mysql> select * from data_ordq   limit 5;
+----+--------------------------+------------+--------+------------+----------+-------+---------+---------+----------+
| ID | recvTime                 | szWindCode | szCode | nActionDay | nTime    | nSide | nPrice  | nOrders | nABItems |
+----+--------------------------+------------+--------+------------+----------+-------+---------+---------+----------+
|  1 | 20140820:09:32:30:189345 | 112037.SZ  | 112037 |   20140820 | 93221000 |    90 | 1029900 |       2 |        2 |
|  2 | 20140820:09:32:30:189345 | 112037.SZ  | 112037 |   20140820 | 93221000 |    66 | 1005100 |       1 |        1 |
|  3 | 20140820:09:32:30:189402 | 112073.SZ  | 112073 |   20140820 | 93223000 |    65 |  915980 |       1 |        1 |
|  4 | 20140820:09:32:30:189402 | 112073.SZ  | 112073 |   20140820 | 93223000 |    66 |  910000 |       1 |        1 |
|  5 | 20140820:09:32:30:189439 | 112121.SZ  | 112121 |   20140820 | 93223000 |    65 |  912500 |       1 |        1 |
+----+--------------------------+------------+--------+------------+----------+-------+---------+---------+----------+
5 rows in set (0.00 sec)

查前5个和后5个的速度差了很多,如果都用上索引,应该速度差不多才对?

建表脚本:
CREATE TABLE data_ordq (
ID BIGINT(16) primary key NOT NULL auto_increment
                , recvTime VARCHAR(32)
                , szWindCode VARCHAR(16)
                , szCode VARCHAR(16)
                , nActionDay INT(
                , nTime INT(
                , nSide INT(
                , nPrice INT(
                , nOrders INT(
                , nABItems INT(
                , nABVolume VARCHAR(65532)
                );
CREATE INDEX idx_szwindcode_nactionday ON data_ordq(szWindCode, nActionDay);

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
6 [报告]
发表于 2014-09-01 10:22 |只看该作者
我都是用二楼的方法可以用的呀。

论坛徽章:
0
7 [报告]
发表于 2014-09-01 10:26 |只看该作者
seesea2517 发表于 2014-09-01 10:22
我都是用二楼的方法可以用的呀。


是可以用,但是速度好慢。。

论坛徽章:
0
8 [报告]
发表于 2014-09-01 11:06 |只看该作者
mysql> explain select * from data_ordq   limit 42838851,5;
+----+-------------+-----------+------+---------------+------+---------+------+----------+-------+
| id | select_type | table     | type | possible_keys | key  | key_len | ref  | rows     | Extra |
+----+-------------+-----------+------+---------------+------+---------+------+----------+-------+
|  1 | SIMPLE      | data_ordq | ALL  | NULL          | NULL | NULL    | NULL | 42838856 |       |
+----+-------------+-----------+------+---------------+------+---------+------+----------+-------+
1 row in set (0.00 sec)

mysql> explain select * from data_ordq  where id in (42838852, 42838853, 42838854, 42838855, 42838856);
+----+-------------+-----------+-------+---------------+---------+---------+------+------+-------------+
| id | select_type | table     | type  | possible_keys | key     | key_len | ref  | rows | Extra       |
+----+-------------+-----------+-------+---------------+---------+---------+------+------+-------------+
|  1 | SIMPLE      | data_ordq | range | PRIMARY       | PRIMARY | 8       | NULL |    5 | Using where |
+----+-------------+-----------+-------+---------------+---------+---------+------+------+-------------+
1 row in set (0.00 sec)

mysql> explain select * from data_ordq where id > 42838851 ;
+----+-------------+-----------+------+---------------+------+---------+------+----------+-------------+
| id | select_type | table     | type | possible_keys | key  | key_len | ref  | rows     | Extra       |
+----+-------------+-----------+------+---------------+------+---------+------+----------+-------------+
|  1 | SIMPLE      | data_ordq | ALL  | PRIMARY       | NULL | NULL    | NULL | 42838856 | Using where |
+----+-------------+-----------+------+---------------+------+---------+------+----------+-------------+
1 row in set (0.00 sec)


好像只有in语句用到了索引,〉和没有where的limit语句都没有用到索引

论坛徽章:
0
9 [报告]
发表于 2014-09-01 11:09 |只看该作者
mysql> explain select * from data_ordq where id > 42838851\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: data_ordq
         type: ALL
possible_keys: PRIMARY
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 42838856
        Extra: Using where
1 row in set (0.00 sec)

mysql> explain select * from data_ordq  where id in (42838852, 42838853, 42838854, 42838855, 42838856)\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: data_ordq
         type: range
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 8
          ref: NULL
         rows: 5
        Extra: Using where
1 row in set (0.00 sec)

mysql> explain select * from data_ordq   limit 0,5\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: data_ordq
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 42838856
        Extra:
1 row in set (0.00 sec)

竖着看

论坛徽章:
0
10 [报告]
发表于 2014-09-01 13:52 |只看该作者
亲爱的小伙伴们!


高薪诚聘以下两个职位:

一、
MySQL
数据库工程师

岗位职责:

1、根据产品的需求设计数据库架构;
2、研究前瞻性的数据库技术;
3、改善现有数据库结构,提供具备可扩展的、高效数据访问服务;
4、负责现有数据系统的稳定性、高可用性、扩展性的相关保障工作及性能调优
5、数据库性能分析和优化,备份以及恢复;
6、DBA 相关平台化工具的建设;
7、帮助软件工程师解决日常开发中的数据库技术问题。


职位要求
1、计算机专业本科以上学历,3年以上Mysql数据库系统运维经验;
2、精通MySQL数据库运行机制、体系架构与性能优化;
3、精通MySQL数据库的管理、扩容、备份恢复原理、性能监控及数据结构优化;
4、精通MySQL存储引擎InnoDB、MyISAM,精通存储过程和事务;
5、精通MySQL复制、Cluster、分布式架构,熟练掌握数据库维护工具;
6、精通Linux操作系统的管理维护与使用,熟悉Linux系统下常用服务的架设与维护,有一定网络管理知识;
7、熟悉Shell或Perl编程,有一定的PHP编程经验;
8、有上亿数据量数据库架构经验者优先;
9、有大中型互联网网站公司大型项目的数据库设计、开发和支持经验优先。
10、良好的运维工作服务意识;
11、勤奋努力、思维活跃,强烈的工作责任感、良好的团队协作能力和克服困难的能力。


待遇:  
1、入职即购买“五险一金”,每月餐补、通讯补助,年终双薪  
2、弹性工作时间  
3、个人提升空间  

4、工作地点四川成都

二、
数据库产品经理

工作职责
1.市场及用户研究:负责产品的市场分析、用户分析、竞品分析;
2.产品规划及设计:负责产品规划、需求管理、产品设计和产品的版本管理;
3.开发及项目管理:在研发过程中负责跟进项目,并及时进行需求确认;
4.产品运营:在产品的整个生命周期中负责各角色的协调沟通、数据分析、问题处理,并负责产品在公司各部门的培训演示;
5.市场推广:负责产品定价和对营销、市场进行支持性配合.

任职资格
1.本科以上学历,英语cet6或同等级以上水平,熟练阅读英文新闻、报告等;
2.3年以上互联网产品发展经验,包括产品规划、设计、项目管理及团队管理;
3.对于产品和用户体验有深入充分的理解,对产品的解决方案有成熟良好的判断力;
4.熟悉互联网的数据分析体系;
5.逻辑思维能力强,具有良好的沟通表达能力和文字表达能力;
6.对工作充满热情,有良好的团队合作能力和学习能力。
7.熟悉海外市场、软件市场、网络营销者优先;

工作地点四川成都


感兴趣的小伙伴们加偶QQ:2909355268或发简历至2909355268@qq.com.谢谢~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP