MySQL版本 5.7.13、SELECT语句IN与OR的效率比较,以下是数据查询量,表总数据量10万条。
100条数据 字段为主键的情况 in:0.04 sec or:0.06 sec 添加索引的情况 in:0.00 sec or:0.01 sec 无索引的情况 in:0.04 sec or:0.06 sec 1万条数据 字段为主键的情况 in:0.06 sec or:2 min 37.90 sec 添加索引的情况 in:0.08 sec or:2 min 39.22 sec 无索引的情况 in:0.07 sec or:2 min 39.73 sec 10万条数据 字段为主键的情况 in:2.74 sec or:13 min 46.52 sec 添加索引的情况 in:2.94 sec or:14 min 13.72 sec 无索引的情况 in:4.35 sec or:15 min 19.39 sec 查询数据小的时候并无多大差异,随着查询数据量增大OR就显的越来越慢。
创建表
CREATE TABLE `test_in_or` ( `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增id', `number` int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '编号', `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间', PRIMARY KEY (`id`) ) ENGINE=`InnoDB` AUTO_INCREMENT=1 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ROW_FORMAT=DYNAMIC COMMENT='测试or和in的效率' CHECKSUM=0 DELAY_KEY_WRITE=0;
添加索引
添加普通索引 ALTER TABLE `test_in_or` ADD INDEX number(`number`); 删除普通索引 ALTER TABLE `test_in_or` DROP INDEX `number`; 添加主键索引 添加(PS在这里不需要):ALTER TABLE `test_in_or` ADD PRIMARY KEY (`number`); 更新主键:ALTER TABLE `test_in_or` DROP PRIMARY KEY, ADD PRIMARY KEY (`id`, `number`);
PHP生成代码(语句太长,贴出来不容易)
数据写入sql语句 $sql = 'INSERT INTO test_in_or (`number`) VALUES'; $number = 100000; for($i=1; $i<=$number; $i++) { $sql .= ' ('.$i.'),'; } echo substr($sql, 0, -1).';'; SELECT IN语句 $number = 100000; $sql = 'SELECT * FROM test_in_or WHERE `number` IN ('; for($i=1; $i<=$number; $i++) { $sql .= $i.', '; } echo substr($sql, 0, -2).');'; SELECT OR语句 $number = 100000; $sql = 'SELECT * FROM test_in_or WHERE'; for($i=1; $i<=$number; $i++) { $sql .= ' `number`='.$i.' OR'; } echo substr($sql, 0, -3).';';
发表评论: