mysql 建立索引在on 从句中_MySQL优化
一,sql查询语句的优化
1,关于sql语句的子查询可以优化成表连接的方式来查询,这里要考虑的是一对多的关系,如果出现一对多的关系的话可以使用distinct去除重复.
2,关于group by的优化需要根据实际情况灵活运用,group by可能会出现临时表(Using temporary),文件排序(Using filesort)等,影响效率。
可以通过关联的子查询,来避免产生临时表和文件排序,可以节省io.
3,关于limit的优化,1)通常limit的使用需要和order by一同使用,这时可以使用由索引的列或者主键列进行order by操作.
二,关于索引的优化
1,如何选择合适的索引
1)在where从句,group by从句,order by从句,on从句中出现的列建立索引
2)索引字段越小越好
3)离散度高的列放在联合索引的前面
select count(distinct row1),count(distinct row2) from table;
count()值大的就是离散程度高.
三,关于表结构的优化
1选择合适的数据类型
1)使用可以存下你数据的最小的数据类型
2)使用简单的数据类型.int要比carchar类型在MySQL处理上简单
3)尽可能的使用not null定义字段.
4)尽量少用text类型,非用不可时最好考虑分表.
5)使用int类型存储日期
使用from_unixtime()将int类型转换为日期 使用unix_timestamp()将日期转换为int
6)使用int类型ip地址
使用inet_aton()将IP地址转化为bigint
使用inet_ntoa()将bigint转换为IP地址
2,使用第三范式的规范(用时间换取空间)
将表中重复量高的数据使用额外的一张表储存,也就是常见的商品详情和商品分类分开储存使用的时候做表连接进行查询.
3,使用反范式化(用空间换取时间)
不遵守范式化规范,将数据都放在一个表中用于减少关联查询提高查询效率.
关于是否要遵守范式化规范需要看实际情况(又水了一章)
4,为数据表做垂直拆分,将原来一个表的很多列拆分成多个列,解决表的宽度问题,通常拆分原则可以按一下进行
1),把不常用的字段单独存放单一个表中
2),八达的字段独立存放单一个表中
3)把经常一起使用的字段放到一起
5,为数据表做水平拆分,如果数据表数据量很大的话可以同时建立多个相同的数据表将数据分开存储,常用的水平才分方法为
1)对customer_id进行hash运算,如果要拆分成5个表则使用mod(customer_id,5)取出0-4个值
2)针对不同的hashID把数据存到不同的表中.
原文:http://www.cnblogs.com/handsome-man/p/5520815.html
相关资源:MYSQLinnodb性能优化学习总结_innodb_spin_wait_delay,mysqlspin...
————————————————
版权声明:本文为CSDN博主「佯真愚」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_34236986/article/details/114334057
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2020-08-25 await,async 我要把它翻个底朝天,这回你总该明白了吧