多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
##四、索引规范 1. 索引不是越多越好,按实际需要进行创建 > 索引是一把双刃剑,它可以提高查询效率但也会降低插入和更新的速度并占用磁盘空间。适当的索引对应用的性能至关重要,而且在MySQL中使用索引它的速度是极快的。遗憾的是,索引也有相关的开销。每次向表中写入时(如INSERT、UPDATEH或DELETE),如果带有一个或多个索引,那么MySQL也要更新各个索引,这样索引就增加了对各个表的写入操作的开销。只有当某列被用于WHERE子句时,才能享受到索引的性能提升的好处。如果不使用索引,它就没有价值,而且会带来维护上的开销。 2. 查询的字段必须创建索引 > 如: 1、SELECT、UPDATE、DELETE语句的WHERE条件列 2、多表JOIN的字段 3. 不在索引列进行数学运算和函数运算,无法使用索引,导致全表扫描 <code> 例: SELECT * FROM t WHERE YEAR(d) >= 2016; 由于MySQL不像Oracle那样支持函数索引,即使d字段有索引,也会直接全表扫描,应改为 SELECT * FROM t WHERE d >= '2016-01-01'; </code> 4. 不在低基数列上建立索引,例如‘性别’ >有时候,进行全表浏览要比必须读取索引和数据表更快,尤其是当索引包含的是平均分布的数据集是更是如此。对此典型的例子是性别,它有两个均匀分布的值(男和女)。通过性别需要读取大概一半的行。在种情况下进行全表扫描浏览要更快。 5. 不使用%前导的查询,如like‘%xxx’无法使用索引,导致全表扫描 <code> 低效查询 SELECT * FROM t WHERE name LIKE '%de%'; -----> 高效查询 SELECT * FROM t WHERE name LIKE 'de%'; </code> 6. 不使用反向查询,如 not in / not like > 无法使用索引,导致全表扫描 7. 避免冗余或重复索引 > 联合索引IX_a_b_c(a,b,c) 相当于 (a) 、(a,b) 、(a,b,c),那么索引 (a) 、(a,b) 就是多余的。