国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

優(yōu)化mysql的limit offset的例子

2024-07-24 13:01:18
字體:
供稿:網(wǎng)友

經(jīng)常碰到的一個(gè)問題是limit的offset太高,如:limit 100000,20,這樣系統(tǒng)會(huì)查詢100020條,然后把前面的100000條都扔掉,這是開銷很大的操作,導(dǎo)致查詢很慢。假設(shè)所有分頁的頁面訪問頻率一樣,這樣的查詢平均掃描表的一半數(shù)據(jù)。優(yōu)化的方法,要么限制訪問后面的頁數(shù),要么提升高偏移的查詢效率。

一個(gè)簡單的優(yōu)化辦法是使用覆蓋查詢(covering index)查詢,然后再跟全行的做join操作。如:

復(fù)制代碼 代碼如下:


SQL>select * from user_order_info limit 1000000,5;


這條語句就可以優(yōu)化為:

復(fù)制代碼 代碼如下:


select * from user_order_info inner join (select pin from user_order_info limit 1000000,5) as lim using(pin);
SQL>explain select * from user_order_info limit 1000000,5;
+----+-------------+-----------------+------+---------------+------+---------+------+----------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------------+------+---------------+------+---------+------+----------+-------+
| 1 | SIMPLE | user_order_info | ALL | NULL | NULL | NULL | NULL | 23131886 | |
+----+-------------+-----------------+------+---------------+------+---------+------+----------+-------+
1 row in set (0.00 sec)
SQL>explain extended select * from user_order_info inner join (select pin from user_order_info limit 1000000,5) as lim using(pin);
+----+-------------+-----------------+--------+---------------+---------+---------+---------+----------+----------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-----------------+--------+---------------+---------+---------+---------+----------+----------+-------------+
| 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 5 | 100.00 | |
| 1 | PRIMARY | user_order_info | eq_ref | PRIMARY | PRIMARY | 42 | lim.pin | 1 | 100.00 | |
| 2 | DERIVED | user_order_info | index | NULL | PRIMARY | 42 | NULL | 23131886 | 100.00 | Using index |
+----+-------------+-----------------+--------+---------------+---------+---------+---------+----------+----------+-------------+
3 rows in set, 1 warning (0.66 sec)



根據(jù)兩個(gè)explain的對比,可以清晰發(fā)現(xiàn),第一個(gè)未使用索引,掃描了23131886行,第二個(gè)也掃描了同樣的行數(shù),但是使用了索引,效率提高了。這樣可以直接使用index得到數(shù)據(jù),而不去查詢表,當(dāng)找到需要的數(shù)據(jù)之后,在與全表join,獲得其他的列。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 图们市| 敦化市| 讷河市| 博客| 怀安县| 府谷县| 开鲁县| 宁阳县| 文昌市| 汉中市| 岗巴县| 灵石县| 博罗县| 同仁县| 内乡县| 比如县| 博湖县| 朝阳区| 区。| 延川县| 怀仁县| 西林县| 高雄县| 临泽县| 蒲江县| 淳化县| 灵武市| 鄂伦春自治旗| 习水县| 晋江市| 焦作市| 务川| 克山县| 威远县| 永靖县| 大方县| 惠东县| 明水县| 闽清县| 塘沽区| 永福县|