
SELECT * FROM user WHERE id=1
SELECT * FROM user WHERE salary=5000
3
、理由
1. 使用 or 可能会使索引失效,从而全表扫描;
2. 对于 or 没有索引的 salary 这种情况,假设它走了 id 的索引,但是走到 salary 查询条件时,它还
得全表扫描;
3. 也就是说整个过程需要三步:全表扫描+索引扫描+合并。如果它一开始就走全表扫描,直接一遍扫
描就搞定;
4. 虽然
mysql 是有优化器的,出于效率与成本考虑,遇到 or 条件,索引还是可能失效的;
三、尽量使用数值替代字符串类型
1
、正例
1. 主键(id): primary key 优先使用数值类型 int , tinyint
2. 性别(sex):0代表女,1代表男;数据库没有布尔类型, mysql 推荐使用 tinyint
2
、理由
1. 因为引擎在处理查询和连接时会逐个比较字符串中每一个字符;
2. 而对于数字型而言只需要比较一次就够了;
3. 字符会降低查询和连接的性能,并会增加存储开销;
四、使用
varchar
代替
char
1
、反例
`address` char(100) DEFAULT NULL COMMENT '地址'
2
、正例
`address` varchar(100) DEFAULT NULL COMMENT '地址'
评论