查询第1页的数据:
SELECT * FROM t_tel_record
WHERE f_qiye_id=xxx
ORDER BY f_Starttime DESC
LIMIT 0,100
当数据量很大,需要查询第10000页的数据:
SELECT * FROM t_tel_record
WHERE f_qiye_id=xxx
ORDER BY f_Starttime DESC
LIMIT 999900,100 -- 或者 OFFSET 999900 LIMIT 100
SELECT * FROM
t_tel_record t1
INNER JOIN (
SELECT f_id
FROM t_tel_record
WHERE f_qiye_id = xxx
ORDER BY f_id DESC
LIMIT 999900, 100
) t2 ON t1.f_id = t2.f_id
min_id = SELECT f_id
FROM t_tel_record
WHERE f_qiye_id = xxx
ORDER BY f_id DESC
LIMIT 999900, 1
SELECT * FROM
t_tel_record t1
WHERE f_qiye_id = xxx
AND f_id < {min_id} + 1
ORDER BY f_id DESC
LIMIT 100
降序情况下,每次提取下一页的数据时,f_id < min_id order by f_id desc limit 100; 上一页 f_id > max_id order by f_id desc limit 100
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
第一页:(降序)
SELECT * FROM t_tel_record t1
WHERE f_qiye_id = xxx
ORDER BY f_id DESC LIMIT 100
获取结果集最大最小id:一般是第一条和最后一条,或者 max_id=max(f_id), min_id=min(f_id)
下一页(如果有):
SELECT * FROM t_tel_record t1
WHERE f_qiye_id = xxx
AND f_id < {min_id} -- min_id变量
ORDER BY f_id DESC LIMIT 100
上一页(如果有):
SELECT * FROM t_tel_record t1
WHERE f_qiye_id = xxx
AND f_id > {max_id} -- max_id变量
ORDER BY f_id DESC LIMIT 100
最后一页:(降序)
SELECT * FROM (
SELECT * FROM t_tel_record t1
WHERE f_qiye_id = xxx
ORDER BY f_id ASC LIMIT 100) AS t
ORDER BY f_id DESC
倒数第二页:(以此类推)
SELECT * FROM (
SELECT * FROM t_tel_record t1
WHERE f_qiye_id = xxx
ORDER BY f_id ASC LIMIT 100, 100) AS t
ORDER BY f_id DESC
- f_Starttime上没有可用索引
SELECT f_qiye_id,f_id,f_money,f_type,f_callno,f_calltono,f_Starttime,f_Endtime, f_Calltime,f_status, f_num,f_result,f_time,f_user_id,f_is400,f_crm_log,f_code, f_path,f_crm_id,f_telbox_id,f_mp3_len, f_in_out_type, f_call_type FROM d_ec_telecom7.t_tel_record_201710
WHERE f_id > 0
and (f_Starttime>='2017-10-25 00:00:00' and f_Starttime<='2017-10-26 00:00:00') ORDER BY f_id ASC LIMIT 1000
sql2:
1
2
3
SELECT f_log_id,f_crm_id,f_user_id,f_qiye_id,f_creat_time,f_send_time,f_end_time,f_do_type, f_static_time,f_go_web,f_type,f_contact_num,f_share,f_record_type,f_provice,f_city,f_is_addclient, f_is_customer,f_ontime_flag,f_msg_type,f_id,f_style,f_operate_type,f_from,f_sendmsg FROM d_ec_contact.t_crm_contact_at201708
WHERE f_log_id > 3815923707
and (f_creat_time>='2017-08-01 00:00:00' and f_creat_time<='2017-08-02 00:00:00') ORDER BY f_log_id ASC LIMIT 1000