Mysql的分页查询优化

Posted 努力做一个伪程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql的分页查询优化相关的知识,希望对你有一定的参考价值。

先创建一个数据库test, 再建立一个表格devices,(这里建立多个字段来演示效果)

CREATE TABLE `devices`  (
  `id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ‘‘,
  `TVName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `TVModelNumber` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `TVSerialNumber` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `TVRoomID` int(11) DEFAULT NULL,
  `TVMACAddress` varchar(17) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `TVIPAddress` varchar(15) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `VSecureTVID` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `Type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `PowerStatus` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `TVUniqueID` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `FirmwareId` int(11) DEFAULT NULL,
  `CloneId` int(11) DEFAULT NULL,
  `LastCloneRename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT {"old":"Unknown","new":"Unknown"},
  `Status` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `Progress` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `TVStatus` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `si_clone_Identifiers` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `si_firmware_Identifier` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `tv_clone_Identifiers` varchar(8000) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `tv_firmware_Identifier` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `success_siclone_Identifier` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `success_tvclone_Identifier` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `clone_color` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT black,
  `fw_color` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT black,
  `CreatedDate` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `ModifiedDate` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `Lastonline` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `clone_mode` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT Upgrade,
  `upload_progress` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT ST,
  `upload_session_id` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `upload_session_start` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `upload_session_end` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `upload_session_status` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `channel_color` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `app_color` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `upgrade_type` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `si_Identifiers` text CHARACTER SET utf8 COLLATE utf8_general_ci,
  `networkInterfaceIp` varchar(15) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `clone_type` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT None,
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `FirmwareId`(`FirmwareId`) USING BTREE,
  INDEX `CloneId`(`CloneId`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

我这里想这个表devices里面添加了8000条数据.

SELECT * FROM `devices` limit 7000,10   #0.015s这里消耗的时间是0.015s

select * from `devices` where id > (select id from devices limit 7000,1) limit 10 #0.002s这里消耗的时间是0.002s

同样的分页查询, 消耗时间不一样


待续…

以上是关于Mysql的分页查询优化的主要内容,如果未能解决你的问题,请参考以下文章

Mysql的分页查询优化

jsp与mysql的分页

彻底搞明白大数据量下Mysql的分页优化

MySQL百万级数据量分页查询方法及其优化建议

MySQL的分页优化

在mysql 数据库下,基于sql 语言的分页语句