免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: robert_wjj
打印 上一主题 下一主题

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

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
11 [报告]
发表于 2014-09-01 14:42 |只看该作者
select * from my_table where id > (select count(id) -100 from my_table);

论坛徽章:
0
12 [报告]
发表于 2014-09-01 14:56 |只看该作者
chengchow 发表于 2014-09-01 14:42
select * from my_table where id > (select count(id) -100 from my_table);


这句可以执行,但是>好像没用到索引,只有in能用到。现在只好用where id in (从count得出的后100个id)
但是这样实在太丑陋,而且in语句最大只能支持1000的list,如果需求变成想要后3000条,就又麻烦了

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
13 [报告]
发表于 2014-09-01 15:13 |只看该作者
本帖最后由 chengchow 于 2014-09-01 15:14 编辑

回复 12# robert_wjj
我没这么大的测试文件,你可以把*改成字段名称看下
select id,column2...columnN from my_table where id > (select count(id) -100 from my_table);

   

论坛徽章:
0
14 [报告]
发表于 2014-09-01 15:50 |只看该作者
本帖最后由 robert_wjj 于 2014-09-01 15:52 编辑
chengchow 发表于 2014-09-01 15:13
回复 12# robert_wjj
我没这么大的测试文件,你可以把*改成字段名称看下
select id,column2...columnN f ...



不需要大测试文件,用explain就可以看到有没有用索引:
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)

key 是NULL,说明没用索引。



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)

这个in语句的key是PRIMARY用到了索引,实际执行速度也快了很多

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
15 [报告]
发表于 2014-09-01 16:16 |只看该作者
  1. mysql> explain select * from s1 where id > 200\G
  2. *************************** 1. row ***************************
  3.            id: 1
  4.   select_type: SIMPLE
  5.         table: s1
  6.          type: range
  7. possible_keys: PRIMARY,id
  8.           key: PRIMARY
  9.       key_len: 4
  10.           ref: NULL
  11.          rows: 4
  12.         Extra: Using where
  13. 1 row in set (0.00 sec)
复制代码
这个是不是你表结构的问题

论坛徽章:
0
16 [报告]
发表于 2014-09-01 16:36 |只看该作者
回复 15# chengchow


    你试一下:
  explain select * from s1 where id > 1\G

论坛徽章:
0
17 [报告]
发表于 2014-09-01 16:38 |只看该作者
我又新建了一个测试表,比较见鬼:
mysql> select * from test_ind;
+----+-------+-------+
| ID | nTime | nSide |
+----+-------+-------+
|  1 |     1 |     1 |
|  2 |     1 |     1 |
|  3 |     1 |     1 |
|  4 |     1 |     1 |
|  5 |     1 |     1 |
|  6 |     1 |     1 |
|  7 |     1 |    12 |
|  8 |     1 |     0 |
|  9 |     1 |    11 |
| 10 |     1 |    13 |
| 11 |     1 |    17 |
| 12 |     1 |    18 |
+----+-------+-------+
12 rows in set (0.00 sec)

mysql> explain select * from test_ind where id >7\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: test_ind
         type: ALL
possible_keys: PRIMARY
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 12
        Extra: Using where
1 row in set (0.00 sec)

mysql> explain select * from test_ind where id >9\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: test_ind
         type: range
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 8
          ref: NULL
         rows: 4
        Extra: Using where
1 row in set (0.00 sec)


id>8 以下不行,id>8 以上都用到了,晕了。。。

论坛徽章:
0
18 [报告]
发表于 2014-09-01 16:39 |只看该作者
建表脚本:
CREATE TABLE test_ind ( ID BIGINT(16) primary key NOT NULL auto_increment                 
                                      , nTime INT(                 
                                      , nSide INT(                 
                                      );

引擎用的memory

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
19 [报告]
发表于 2014-09-01 17:03 |只看该作者
回复 16# robert_wjj
mysql> explain select * from s1 where id > 1\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: s1
         type: range
possible_keys: PRIMARY,id
          key: PRIMARY
      key_len: 4
          ref: NULL
         rows: 4
        Extra: Using where
1 row in set (0.00 sec)


   

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
20 [报告]
发表于 2014-09-01 17:09 |只看该作者

我用的innodb引擎,memory支持索引查找吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP