mysql使用的坑
阿新 • • 發佈:2017-07-31
獲取 估計 apply 使用 記錄 設置 exp time 很快
一:
mysql默認是安裝記錄的物理順序取數據的,如果不加order by 排序,可能得不到預期的結果。
(1) 獲取 兩個時間點的 id (很快)
$sql = ‘select id from apply_info where create_time< {$now} limit 1’; (要加 order by id desc)
獲得 idNow
$sql = ‘select id from apply_info where create_time>= {$yesterday} limit 1’ (要加 order by id asc)
獲得 idYt
(2) 每次取 1000
do{
select user_mobile,user_from from apply_info where id <= {$idNow} limit 1000;
idNow -= 1000;
//toDo
} while (idNow >= idYt)
二:
當使用limit時,explain可能會造成誤導
(1)explain估計行數,不考慮limit,可能會對查詢估計過多的檢查行數
(2)類似於SELECT ... FROM TBL LIMIT N這樣的查詢因為用不到索引將要報告為慢查詢,(如果N不大,實際很快)
配置文件設置min-examined-row-limit=Num of Rows,檢查的行數>=這個量的查詢才會被報告為慢查詢,避免誤判
(3)類似於這樣的select .. from tb where key_part1= ? order by key_part2 limit n,explain也要估計出過多的檢查行數
mysql使用的坑