![]() | 1 wesley 2016-04-06 11:42:12 +08:00 需要加上 order by item_id |
![]() | 2 dongyado 2016-04-06 11:43:52 +08:00 你的查询语句都没用 id,item_id 肯定会全表扫描的啊。。。 |
![]() | 3 keakon 2016-04-06 14:21:36 +08:00 没有 where 条件 |
4 sghcel 2016-04-06 14:27:35 +08:00 ![]() select item_id from table_name limit 10000,20 这样就不会全表扫描 具体原因看我的 blog: http://dorid.me/2016/02/03/mysql-limit-performance-optimize/ |
5 vincenttone 2016-04-06 14:30:51 +08:00 explain select * from table_name limit 10000,20; explain select * from table_name limit 10000,20 order by id desc; explain select * from table_name where item_id = 1 limit 10000,20; 挨个执行看看,你还需要花 20 分钟研究一下索引到底是什么 |
6 rqrq 2016-04-06 14:48:28 +08:00 先加上 order by id desc 试试,还是不行试试: select * from table_name where id < (select min(id) from (select id from table_name order by id desc limit 10000) as tmp) limit 20 |
![]() | 7 msg7086 2016-04-06 14:50:42 +08:00 ![]() MySQL 的分页是先读再丢,所以应该要读了扔了 10 万条记录以后再返回。 我自己是先读 ID 然后再用 ID IN () 去查表返回的。 |
![]() | 8 davidzhang 2016-04-06 15:06:43 +08:00 因为你没有用到索引啊 |
9 stabc 2016-04-06 15:28:18 +08:00 |
![]() | 10 treycheng 2016-04-06 15:33:36 +08:00 这个 limit 10000,20 做分页查询 首先会查处前面 10000 行的所有 select 的内容, 然后丢弃掉 分页查询 一般先查询你目标内容的主键 再通过主键查询目标行 |
![]() | 12 ivito OP @dongyado 不会根据 Primary key 直接从从 B 数的左侧或右侧遍历吗,耗时不应该只是个扫描 Primary key 索引的耗时吗 |
![]() | 14 jiehuangwei 2016-04-06 17:47:30 +08:00 看到这种SQL,就有想往死里打的冲动。。。。 |
![]() | 15 wikimore 2016-04-06 17:50:37 +08:00 你这个 SQL 就是不全表扫 也不会太快 LIMIT 10000,20 |
![]() | 16 wwek 2016-04-06 18:15:17 +08:00 大翻页问题 翻页从产品角度优化. 只给下一页 ,获取更多什么的 |
![]() | 22 elgoog1970 2016-04-07 11:16:09 +08:00 |