51
257 天前
```
CREATE TABLE IF NOT EXISTS million_user_info (
id bigint(7) PRIMARY KEY AUTO_INCREMENT,
city_id int,
delete_time TIMESTAMP,
others VARCHAR(111) DEFAULT "" NOT NULL
);
CREATE INDEX idx_city_id ON million_user_info (city_id,id);(无独立 city_id 索引)
```
模拟环境:
125 万条数据;插入的 city_id 在楼主给出的 city_id 范围内,others 为干扰随机 str
查询语句:
```
SELECT * FROM `million_user_info` WHERE ( `city_id` IN (45757,45967,46044,46126,46288,46473,46642,46769,46919,47078,47119,45758,45762,45786,45811,45822,45839,45850,45870,45877,45892,45905) ) AND `million_user_info`.`delete_time` IS NULL ORDER BY `id` DESC LIMIT 1000;
```
测试结果:
当 delete_time=null 的行数实际只有 1 行时,秒查;
当 delete_time=null 的行数实际有 10w 行时,且 SQL 无 limit,耗费 11s ;
当 delete_time=null 的行数实际有 10w 行时,且 SQL 加 limit 1000,秒查;
当 delete_time=null 的行数实际有 10w 行时,且 SQL 包含 force index,无 limit,耗费 15.9s ;
当 delete_time=null 的行数实际有 10w 行时,且 SQL 包含 force index,加 limit 1000,耗费 4.9s ;
加上单独的 city_id 索引后,上述测试结果无明显变化。