MYSQL数据库优化(一)

  • 内存的读写速度远大于磁盘的读写速度,减小磁盘读写,能够做为重点优化方向。
  • 数据库内部最重要的就是存储结构,存储结构必然涉及到数据结构知识。好比用到了经常使用的哈希图、树。
  • MYSQL数据库经常使用两种引擎,InnoDB、MyISAM,能够直接对表指定数据库引擎。
  • MYSQL索引是一种数据结构,帮助更快的查询数据。索引使用的是B+树(B树改进版,一个节点能够包含多个值,深度可控,IO读写次数少,三层能够保存数千万个值)。叶子节点存值,其他节点存索引值。数据结构可视化工具:https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html
  • MYSQL生成的表和数据会保存在mysql/data目录下,并以表名生成对应的目录。FRM文件是表设计文件。
  • InnoDB引擎,会在mysql/data/表目录下生成IBD文件。IBD文件包含索引和数据,索引是汇集型索引。
  • MyISAM引擎,会在mysql/data/表目录下生成MYI和MYD文件,MYI是索引文件,记录存储地址,MYD是数据文件。索引是非汇集型索引。不支持事务。
  •  使用索引注意事项:1>.不要在DML频繁的表上加索引(一百万条数据维护B+树耗性能)。 2>.不要在数据较少的表上加索引。3>.尽可能不要在索引列上加函数计算。 4>.不要select *查询,索引会失效。5>.在查询比较频繁的表上加索引。6>.在离散量比较大的字段加索引(计算方法:count(distinct col):count(col)越大越好,如uuid,外键ID等)
  • 尽可能使用int自增做为主键,由于这样符合数组的特性,数组查询效率较高(访问局部性原理,数组内存地址连续,读取一个扇区的数据放入二级缓存便可,速度更快,不用反复查询内存)。
  • InnoDB引擎建立的表,能够不设置主键。可是自己不能没有主键,当不设主键的时候,会在表中找到非NULL而且设置为索引的字段做为主键,若是找不到这样的字段,就用_rowid做为主键,这样会致使查询效率变差。1>全表扫描性能差。2>_rowid实现源自于全局的序列,这样高并发插入数据共享此序列,MYSQL保证数据安全,会加上锁。这必然致使性能下降
  • InnoDB引擎主键索引查询时,会根据索引值直接在叶子节点拿到值。其余如字段索引,会生成个B+树,叶子节点保存自己索引值和主键值,再根据主键值回到主键索引B+树中获取真正的值(回表查询)。
相关文章
相关标签/搜索