MySQL优化总结

建表原则
  • 定长字段与变长字段分离,使存储空间整齐,加速查询;
  • 常用字段与不常用字段分离
  • 适当增加冗余字段,如一对多查询需要关联统计
列类型选择
  • 字段类型选择优先级:int,bigint > date,time > enum,char > varchar > blob, text;
  • 字段长度够用就行,不要过大
  • 尽量不要使用NULL,不利于索引
索引(btree、hash)
  • 常用多列(联合)索引,索引命中顺序从左向右;
  • 聚簇索引(InnoDB)会发生索引覆盖,非聚簇索引(MyISAM)无影响;
  • 理想索引:查询频繁、区分度高、长度小、索引列尽量覆盖常用查询字段;
  • 索引列不能使用表达式或函数
  1. 对一列的前n个字符使用前缀索引:create index 索引名 on table(列名(n))
  2. 区分度低的列尽量不要建立索引
  3. 使用联合索引时经常出现在where语句中的列放在的前面
  4. 使用索引优化排序的3个条件:
    索引列顺序与order by子句顺序一致;
    索引列的方向(asc、desc)与order by子句一致;
    多表关联时,order by中的字段需要在关联表中的第一个表。
  5. InnoDB存储引擎的表,数据的逻辑顺序与主键顺序一致,可以使用主键排序
  6. 索引可以在存储引擎过滤不必要的锁,减少锁定的行数,进而提升并发性
查询优化
  • limit分页查询随着select ...limit x,y;中的x增大而降低效率,可使用
    select ... from 表 join (select id from 表 limit x,y) as a on 表.id = a.id;进行优化,先从索引查找缩小范围
其它
  • 长时间数据变化后,索引文件和数据文件都将产生空洞,形成碎片,可以使用optimize table 表名;来优化;
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性...
    CaesarXia阅读 12,164评论 1赞 30
  • 系统层面(基本不用动,看了下,买的云服务器基本都已经优化过了) 内核相关参数(/etc/sysctl.conf) ...
    神奇大叶子阅读 2,172评论 0赞 4
  • 先说说什么是镜像(image),什么是容器吧? 这两者有点像《奇异博士》里的那个镜像。镜像就是虚拟出来的世界, ...
    bboymonk阅读 101评论 0赞 0
  • http://xtutu.me/typescript-javascript-compare/
    RainingMan阅读 461评论 0赞 1
  • 入群以来,谁是对你影响帮助或者带给你思考最多的人?为什么? @檀子-...
    小惠_f2b8阅读 131评论 0赞 0

友情链接更多精彩内容