mysql 字段类型对查询效率的影响实验及小范围取值字段不宜添加索引

1. 表ta_app_download_log 中t ype 类型 varchar(5)
(1)第一次查询
[SQL] SELECT COUNT(DISTINCT deviceid) FROM ta_app_download_log WHERE type = '7';
受影响的行: 0
时间: 10.235ms
(2)第二次查询
[SQL] RESET QUERY CACHE;
受影响的行: 0
时间: 0.001ms
[SQL]
SELECT COUNT(DISTINCT deviceid) FROM ta_app_download_log WHERE type = '7';
受影响的行: 0
时间: 10.143ms
(3)第三次查询
[SQL] RESET QUERY CACHE;
受影响的行: 0
时间: 0.001ms
[SQL]
SELECT COUNT(DISTINCT deviceid) FROM ta_app_download_log WHERE type = '7';
受影响的行: 0
时间: 9.971ms
2.复制表 ta_app_download_log 中数据到 表ta_app_download_log_1 中, ta_app_download_log_1  中  t ype 类型  tinyint(4)
(1)第一次查询
[SQL]
RESET QUERY CACHE;
受影响的行: 0
时间: 0.001ms
[SQL]
SELECT COUNT(DISTINCT deviceid)FROM ta_app_download_log_1 WHERE type = 7;
受影响的行: 0
时间: 8.860ms 
(2) 第二次查询
[SQL] RESET QUERY CACHE;
受影响的行: 0
时间: 0.001ms
[SQL]
SELECT COUNT(DISTINCT deviceid)FROM ta_app_download_log_1 WHERE type = 7;
受影响的行: 0
时间: 8.153ms
(3)第三次查询
[SQL] RESET QUERY CACHE;
受影响的行: 0
时间: 0.001ms
[SQL]
SELECT COUNT(DISTINCT deviceid)FROM ta_app_download_log_1 WHERE type = 7;
受影响的行: 0
时间: 8.059ms
3.在表ta_app_download_log_1 的type列建立索引
(1)第一次查询
[SQL] RESET QUERY CACHE;
受影响的行: 0
时间: 0.001ms

[SQL]
SELECT COUNT(DISTINCT deviceid)FROM ta_app_download_log_1 WHERE type = 7;
受影响的行: 0
时间: 18.388ms
(2)第二次查询
[SQL] RESET QUERY CACHE;
受影响的行: 0
时间: 0.001ms

[SQL]
SELECT COUNT(DISTINCT deviceid)FROM ta_app_download_log_1 WHERE type = 7;
受影响的行: 0
时间: 18.538ms
(3)第三次查询
[SQL] RESET QUERY CACHE;
受影响的行: 0
时间: 0.001ms

[SQL]
SELECT COUNT(DISTINCT deviceid)FROM ta_app_download_log_1 WHERE type = 7;
受影响的行: 0
时间: 18.312ms

4. 结论
 比较,1和2中的操作,可知:同样的数据,在查询时  tinyint类型 比 varchar 速度快
 比较2和3中的操作,可知:加索引并不一定能够提高查询速度,由于type的取值范围很小,只有几个取值(7,8,10,15等),使用索引带来的开销反而比不用索引大
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值