MySql limit性能测试

测试环境

数据库:Mysql 5.6

测试工具:Navicat Premium 11.1.13

数据量:200万

表名:bt1

表结构:

-- ----------------------------
-- Table structure for tb1
-- ----------------------------
DROP TABLE IF EXISTS `tb1`;
CREATE TABLE `tb1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `createdOn` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `i_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=2000001 DEFAULT CHARSET=utf8;
View Code

 

测试结果:

[SQL]SELECT
    id
FROM
    tb1
LIMIT 1000000,
 100;
受影响的行: 0
时间: 0.260s

[SQL]

SELECT
    *
FROM
    tb1
LIMIT 1000000,
 100;
受影响的行: 0
时间: 0.556s

[SQL]

SELECT
    *
FROM
    tb1
WHERE
    id IN (
        SELECT
            id
        FROM
            (
                SELECT
                    id
                FROM
                    tb1
                LIMIT 1000000,
                100
            ) DATA
    );
受影响的行: 0
时间: 1.640s

[SQL]

SELECT
    tb1.*
FROM
    tb1
INNER JOIN (
    SELECT
        id
    FROM
        tb1
    LIMIT 1000000,
    100
) DATA
WHERE
    tb1.id = `data`.id;
受影响的行: 0
时间: 0.250s
View Code

 

结语:inner join 效率高于子查询in;用主键分页后在根据主键查询的效率比直接select * 查询效率要高。

posted @ 2016-11-02 11:16  jzblogs  阅读(139)  评论(0)    收藏  举报