mysql优化注意点

image.png

通常和zerofill一起使用,比如int(3),存入1,则自动填充为001。并不是存入的长度


image.png

image.png

image.png

char(n),varchar(n)中的n是最大长度。


image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png



image.png

image.png

image.png

外键索引一般不用,可以通过业务逻辑来实现。全文索引一般也不用,直接上全文搜索引擎:sphinx、elasticsearch


表索引的创建原则:

  1. 最适合素银的列是出现在where子句中的列,或连接子句中的列而不是出现在select关键字后的列

  2. 索引列的基数越大,索引的效果越好

  3. 对字符串进行索引,应该制定一个前缀长度,可以节省大量的索引空间

  4. 根据情况创建符合索引,符合索引可以提高查询效率

  5. 避免创建过多索引,索引会二维占用磁盘空间,降低写操作效率

  6. 主键尽量选择较短的数据类型,可以有效减少索引的磁盘占用,调高查询效率


为什么复合/多列索引更高效呢?

比如key('章','节','段'),它不是分别创建若干个索引,而是创建一个索引,作用在这个索引的组合上。缩短查询范围:如果只查某章,则扫描整个某章;若查询某章下的某节,则把某章下的某节扫描一遍。


对于where name like "%wang%"类型的查询,如果前面有%,则name的索引会失效。这种情况最好用全文搜索引擎,如:sphinx、elasticsearch



索引的注意事项:

  1. 符合索引遵循前缀原则

  2. like查询,%不能放在前面,可以使用全文索引来实现类似功能

  3. column is null 可以使用索引

  4. 如果mysql估计使用索引比全表扫描更慢,会放弃使用索引

  5. 如果or前的条件中的列有索引,后面的没有,索引都不会被用到

  6. 列类型是字符串,查询一定要给值加引号,否则索引失效

(比如字段类型是varchar,where name="100"索引有效,where name=100索引无效)



猜你喜欢

转载自blog.51cto.com/5660061/2386930