久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何進(jìn)行SQL優(yōu)化中的limit分頁(yè)優(yōu)化

共計(jì) 2370 個(gè)字符,預(yù)計(jì)需要花費(fèi) 6 分鐘才能閱讀完成。

如何進(jìn)行 SQL 優(yōu)化中的 limit 分頁(yè)優(yōu)化,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

示例

表 aaaaa 中共有 2375690 數(shù)據(jù)。

優(yōu)化前的 SQL

SQL 執(zhí)行結(jié)果:

SELECT DISTINCT(device_id) uid FROM aaaaa WHERE status = 0 LIMIT 88000,1000;
1000 rows in set (0.48 sec)

SQL 執(zhí)行計(jì)劃:

MariaDB [star]  explain SELECT sql_no_cache DISTINCT(device_id) uid FROM aaaaa WHERE status = 0 LIMIT 88000,1000;
+------+-------------+---------------+------+---------------+------+---------+------+---------+------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+-------------+---------------+------+---------------+------+---------+------+---------+------------------------------+
| 1 | SIMPLE | aaaaa | ALL | NULL | NULL | NULL | NULL | 2375690 | Using where; Using temporary |
+------+-------------+---------------+------+---------------+------+---------+------+---------+------------------------------+

優(yōu)化方式

迅速定位起始 ID,利用主鍵索引,加快掃描速度。可以看到,derived 中,SQL 使用到了覆蓋索引進(jìn)行掃描,雖然還是全表掃,因?yàn)橹粧呙?id 列,大大降低了掃描的 IO 耗費(fèi),快速定位到了 id。

MariaDB [star]  explain SELECT sql_no_cache DISTINCT(device_id) uid FROM aaaaa join (select id from aaaaa limit 88000,1) k on star_device_5.id =k.id where status=0 limit 1000; 
+------+-------------+---------------+-------+---------------+-------------+---------+------+---------+------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+-------------+---------------+-------+---------------+-------------+---------+------+---------+------------------------------------------------+
| 1 | PRIMARY | | ALL | NULL | NULL | NULL | NULL | 88001 | Using temporary |
| 1 | PRIMARY | star_device_5 | ALL | PRIMARY | NULL | NULL | NULL | 2377112 | Range checked for each record (index map: 0x1) |
| 2 | DERIVED | star_device_5 | index | NULL | idx_star_id | 8 | NULL | 2377112 | Using index |
+------+-------------+---------------+-------+---------------+-------------+---------+------+---------+------------------------------------------------+

執(zhí)行結(jié)果:

SELECT sql_no_cache DISTINCT(device_id) uid FROM star_device_5 join (select id from star_device_5 limit 880000,1) k on star_device_5.id =k.id where status=0 limit 1000;
1000 rows in set (0.19 sec)

隨著 m 的增大和 n 的增大,兩種寫(xiě)法的 SQL 執(zhí)行時(shí)間會(huì)有本質(zhì)差別。我做了測(cè)試,當(dāng) m 值增加到 880000 時(shí),優(yōu)化前的 SQL 需要 2 分鐘,優(yōu)化后的 SQL 還是 0.1s 左右。

看完上述內(nèi)容,你們掌握如何進(jìn)行 SQL 優(yōu)化中的 limit 分頁(yè)優(yōu)化的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝各位的閱讀!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-19發(fā)表,共計(jì)2370字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒(méi)有評(píng)論)
主站蜘蛛池模板: 五河县| 潮安县| 腾冲县| 农安县| 阿克苏市| 留坝县| 崇义县| 临安市| 马龙县| 灌南县| 鄂尔多斯市| 三台县| 新乡市| 洛宁县| 临湘市| 灌南县| 诸城市| 巨鹿县| 邓州市| 霍州市| 江城| 鲁山县| 濮阳市| 伊吾县| 阿荣旗| 天峻县| 隆尧县| 五河县| 邢台县| 塔城市| 乐至县| 手机| 迭部县| 五峰| 新和县| 城口县| 秭归县| 于都县| 临汾市| 孟津县| 万荣县|