mysql> desc ads_common; +--------------+-----------+------+--- --+--------------------------------+----------------+ | 领域 | 类型 | 空 | 钥匙 | 默认 | 额外 | +--------------+-----------+------+--- --+--------------------------------+----------------+ | ads_id | bigint(20) 无符号 | 否 | 优先级 | 空 | 自动增量 | | 用户 ID | bigint(20) 无符号 | 否 | 穆尔 | 空 | | | 网站类型 | 枚举('组','用户') | 否 | 穆尔 | 空 | | | 网站ID | bigint(20) 无符号 | 否 | | 空 | | | subgroup_id | bigint(20) 无符号 | 否 | | 空 | | | country_id | smallint(5) 无符号 | 否 | 穆尔 | 空 | | | type_id | int(10) 无符号 | 否 | 穆尔 | 空 | | | 电话 | 整数(11) | 否 | | 空 | | | 手机| int(10) 无符号 | 否 | | 空 | | | cat_id | int(10) 无符号 | 否 | 穆尔 | 空 | | | 品牌标识 | mediumint(8) 无符号 | 否 | 穆尔 | 空 | | | 型号ID | mediumint(8) 无符号 | 否 | 穆尔 | 空 | | | area_id | int(10) 无符号 | 否 | 穆尔 | 空 | | | is_offering | 小整数(1) | 否 | 穆尔 | 1 | | | 价格 | 整数(11) | 否 | 穆尔 | 空 | | | 项目状态 | tinyint(3) 无符号 | 否 | 穆尔 | 空 | | | 添加时间 | 时间戳 | 否 | 穆尔 | CURRENT_TIMESTAMP | | | 问题编号 | smallint(5) 无符号 | 否 | | 空 | | | is_stop | 小整数(1) | 否 | 穆尔 | 0 | | +--------------+-----------+------+--- --+--------------------------------+----------------+
我确实有 type_id、country_id、is_top 多列索引和 type_id 单索引。ads_common 表大约有 180245 行。
1.先查询命令
SELECT c.ads_id FROM ads_common AS c
WHERE c.type_id IN (185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241)
AND c.country_id=226 AND is_stop=0 ORDER BY c.ads_id DESC
找到 180,047 行,耗时 0.0026 秒
2.秒查询命令
SELECT c.ads_id FROM ads_common AS c
WHERE c.type_id=187
AND c.country_id =226 AND is_stop=0 ORDER BY c.ads_id DESC
找到 180,044 行,耗时 0.2335 秒
只有两个不同的命令是“type_id IN (..187..)”和“type_id=187”,为什么命令2比1慢?
如果命令 2 更改为:
SELECT c.ads_id FROM ads_common AS c
WHERE c.type_id IN (185, 187)
AND c.country_id =226 AND is_stop =0 ORDER BY c.ads_id DESC
找到 180,044 行,这需要 0.0007 秒,这更快。
SELECT c.ads_id FROM ads_common AS c
WHERE c.type_id IN (187)
AND c.country_id =226 AND is_stop =0 ORDER BY c.ads_id DESC
找到 180,044 行,这需要 0.2267 秒,这更快。
所有命令都返回几乎相同的行。