《MYSQL教程Mysql的分頁查詢語句的性能分析》要點:
本文介紹了MYSQL教程Mysql的分頁查詢語句的性能分析,希望對您有用。如果有疑問,可以聯系我們。
MYSQL教程最基本的分頁方式:
- SELECT?...?FROM?...?WHERE?...?ORDER?BY?...?LIMIT?...??
MYSQL教程在中小數據量的情況下,這樣的SQL足夠用了,唯一需要注意的問題就是確保使用了索引:舉例來說,如果實際SQL類似下面語句,那么在category_id, id兩列上建立復合索引比較好:
- SELECT?*?FROM?articles?WHERE?category_id?=?123?ORDER?BY?id?LIMIT?50,?10?
MYSQL教程子查詢的分頁方式:
MYSQL教程隨著數據量的增加,頁數會越來越多,查看后幾頁的SQL就可能類似:
SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 10000, 10
MYSQL教程一言以蔽之,就是越往后分頁,LIMIT語句的偏移量就會越大,速度也會明顯變慢
.
此時,我們可以通過子查詢的方式來提高分頁效率,大致如下:
- SELECT?*?FROM?articles?WHERE??id?>=???
- (SELECT?id?FROM?articles??WHERE?category_id?=?123?ORDER?BY?id?LIMIT?10000,?1)?LIMIT?10?
MYSQL教程JOIN分頁方式
- SELECT?*?FROM?`content`?AS?t1????
- JOIN?(SELECT?id?FROM?`content`?ORDER?BY?id?desc?LIMIT?".($page-1)*$pagesize.",?1)?AS?t2????
- WHERE?t1.id?<=?t2.id?ORDER?BY?t1.id?desc?LIMIT?$pagesize;??
MYSQL教程經過我的測試,join分頁和子查詢分頁的效率基本在一個等級上,消耗的時間也基本一致.?explain SQL語句:
?
- id?select_type?table?type?possible_keys?key?key_len?ref?rows?Extra?
- 1?PRIMARY?<derived2>?system?NULL?NULL?NULL?NULL?1???
- 1?PRIMARY?t1?range?PRIMARY?PRIMARY?4?NULL?6264?Using?where?
- 2?DERIVED?content?index?NULL?PRIMARY?4?NULL?27085?Using?index?
MYSQL教程?
MYSQL教程為什么會這樣呢?因為子查詢是在索引上完成的,而普通的查詢時在數據文件上完成的,通常來說,索引文件要比數據文件小得多,所以操作起來也會更有效率.
MYSQL教程實際可以利用類似策略模式的方式去處理分頁,比如判斷如果是一百頁以內,就使用最基本的分頁方式,大于一百頁,則使用子查詢的分頁方式.
MYSQL教程?
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/5735.html