12,545,379条 mysql | 无索引 | 单列(id) 普通索引 | 小结论 | ||
count(1) | 13.8 14.29 14.22 | 7.38s 7.22s 7.5s 7.38 7.29 | 有索引 count(1) 速度快一半 count(1)=count(*) | ||
count(*) | 13.9 13.7 | 7.4 7.6 7.3 7.23 7.5(count(id后)) | 还是用count(1)吧,不用count(索引列)(慢) | ||
count(id) | 14.46 14.85 14.85 | 7.8 8.2 8.16 8.0 7.88 8.33 |
COUNT(字段) 短一点,速度快一点,但是有限 | ||
count(title)
VARCHAR(100) | 15.0 15.0 15.28 | 14.65 15.9 14.9 | |||
count(status) TINYINT(4) | 14.6 14.5 14.4 | 14.4 14.76 15.23 14.39 | |||
|
|
|
| ||
获取 id
where条件是 max(id)的值
| 14 14.75 14.66 14.4 14.9 14.0 13.9 | 0.001 0.001 0.002 |
无索引,where条件是全表扫面 max(id)与min(id)等效率
有索引是顶点定位,微妙级 | ||
获取 id
where条件是 max(id)的值
| 14 14.75 14.66 14.4 14.9 14.0 13.9 | 0.001 0.002 | |||
获取 全列
where条件是 id
| 17.69 17.62 17.55 17.75 17.98 17.4 17.4 17.4 17.74 | 0.001 0.002 | select 列 越少,速度越快 全列与 * 效率差不多 | ||
select * where条件是 id
| 17.73 18.14 17.79 18.26 17.47 17.50 17.54 17.4 17.58 17.74 17.92 | 0.001 0.002 | |||
|
| ||||
结论 | 无索引,where查询 全表扫面 秒级 索引 where 索引 直接定位,不全表查,微秒级
count(1) ≈count(*) 稍>count(索引列) ≈1/2 count(无索引列) count(1)索引 ≈ 1/2 count(1)无索引 count(列)列长度越长,时间会稍微长一点
select 列 越少,速度越快;全列与 * 效率差不多 |
| |||
附注 | RESET QUERY CACHE; --清除缓存 |
|
其他
中英 |
| 貌似全是英文的字段 like 时间更久 ,比全是中文的要慢
SELECT * FROM `tb_item1` where image like '%beac%'; --21.092 21.475 varchar(500) RESET QUERY CACHE; SELECT * FROM `tb_item1` where sell_point like '%品质可靠%'; --17.006 16.953 varchar(500) |
like |
| like 的中文字 长短 影响不是很大
|