MySql项目查询优化经验总结
最近在优化mysql项目部分页面查询较慢的问题时总结出的若干经验,分享如下:
1.查询时如果需要联合其它表查询尽量避免在from之前的sql查询字段中去直接查其它表,这样会导致有几条数据就需要查几次其它表,效率比较堪忧,比如下面这种写法:
还是应该使用关联表的写法去查询,这样主表与每个子表只需关联一次就可以了。 上面的写法改为如下这种,在查询字段中去取关联表对应的字段即可。
2.给相关页面搜索条件酌情添加索引,如果重复率高的条件则不添加,如刚优化完成的区域药品项目药品信息页面有个是否有效的搜索条件,表中该字段几乎都为有效,这种情况下无需创建索引,创建了之后甚至还得浪费存储空间去存储创建的索引;此外在给相应字段创建索引后需注意sql语句的写法,项目优化过程中发现虽然字段加了索引,但是真正查询的时候实际上是没有引用到此索引的,比如在项目优化过程中发现很多时间字段的where条件查询时使用了date_forma函数去转换表本身的字段类型,这种情况会导致该时间字段的索引失效,正确的写法是改为使用str_to_date函数去转变传入的值类型的方式去查询,如下图所示:
右边即为正确写法:
3.关于创建了索引之后在查询过程中是否使用了索引,可以使用 explain 关键字进行分析,写法示例:
假如我们给basic_sys_drug 表的DRUG_CODE创建了索引,使用下面语句查询
explain select * from basic_sys_drug where DRUG_CODE='1000000'
搜索结果为:
重点关注其中的key列的值,key的值就是实际使用的索引名。如果为null,则表示没有使用索引。
4.最后附上通过创建索引优化时,索引失效的几种情况,在实际使用时需要注意一下:
<1>.如果where条件中有or,即使其中有条件带索引也不会走索引查询,要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引;
<2>.如果WHERE查询条件里使用了函数(如上述情况中的:WHERE date_forma(column)=…),MYSQL将无法使用索引;
<3>.对于多列索引,如果where条件中没有使用到第一个索引字段,则不会使用索引;
<4>.like模糊查询以%开头(左模糊)不会使用索引,如果是右模糊则不受影响;
<5>.除了上述几种情况如果发现即使创建了索引依然没有生效,则极有可能是mysql在查询之前会大致估算使用全表扫描如果要比使用索引快,或者查询结果占表中数据
的大多数比重,这种情况下也不会使用索引,就像上面第二点中描述的药品信息页面的是否有效字段。所以在创建索引时应考虑创建之后是否会对效率有明显提升,否则
可能会适得其反。
MySql项目查询优化经验总结相关推荐
- DockOne微信分享(八十一):唯品会数据库备份恢复容器化项目实践经验总结
本文讲的是DockOne微信分享(八十一):唯品会数据库备份恢复容器化项目实践经验总结[编者的话]本文分享了唯品会数据库Docker的异地容灾项目实践经验,项目中针对用户数据库的异地恢复场景的需求进行 ...
- psql where里有自定义函数慢_阿里P8架构师谈:MySQL慢查询优化、索引优化、以及表等优化总结...
MySQL优化概述 MySQL数据库常见的两个瓶颈是:CPU和I/O的瓶颈. CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候. 磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应 ...
- 商业智能项目错误经验总结(三) 需求调研
商业智能项目错误经验总结(三) 需求调研 我所在的公司是房地产开发公司.在公司确定做这个BI项目后,乙方项目组开始进场.由于在前期信息部经理(后面叫leader)已经明确这一期项目只实现销售和财务两条 ...
- MySQL 慢查询优化
为什么查询速度会慢 1.慢是指一个查询的响应时间长.一个查询的过程: 客户端发送一条查询给服务器 服务器端先检查查询缓存,如果命中了缓存,则立可返回存储在缓存中的结果.否则进入下一个阶段 服务器端进行 ...
- ant design vue table 高度自适应_2年Vue项目实战经验汇总!
前言 vue作为前端主流的3大框架之一,目前在国内有着非常广泛的应用,由于其轻量和自底向上的渐进式设计思想,使其不仅仅被应用于PC系统,对于移动端,桌面软件(electronjs)等也有广泛的应用,与 ...
- 项目优化经验——垃圾回收导致的性能问题
谈谈最近优化一个网站项目的经验,首先说一下背景情况: 1) 在页面后台代码中我们把页面上大部分的HTML都使用字符串来拼接生成然后直接赋值给LiteralControl. 2) 网站CPU很高,基本都 ...
- java项目教训_[免费电子书]分析超过600,000个Java项目的经验教训
java项目教训 建立明智的错误处理工作流程需要什么? 调查和解决生产中的应用程序错误对于维持性能和可靠性至关重要. 但是,这并不意味着要花很多时间. 要理解为什么在生产中的故障排除,可这样的头痛,我 ...
- mysql数据库查询优化建议_mysql数据库查询优化的24条建议
MySQL是一个强大的开源数据库.随着MySQL上的应用越来越多,MySQL逐渐遇到了瓶颈.这里提供一些关于Mysql 数据库查询优化的24条优化建议,仅供参考. Mysql 查询优化 1.使用慢查询 ...
- docker部署mysql项目_docker部署springboot项目(web + mysql)
前言 docker目前是非常热门的项目,本文暂不讨论docker集群环境中的部署项目问题. 环境准备 1. docker环境(本文使用centos7下的docker环境) 2. javaWeb项目(s ...
最新文章
- 关于微信公众号注意事项
- git获取指定release版本代码
- 【OpenCV 4开发详解】轮廓发现与绘制
- Maltego更新到4.2.6
- 如何正确对待vb脚本里的session
- Silverlight WCF 上传实现
- (十二)深入浅出TCPIP之Nagle算法
- C语言存储空间布局以及static解析
- java 空心菱形
- freeradius 3.0 时间限制_java锁之RateLimiter(限制访问速率)
- find和xargs
- 5款免费的WordPress备份解决方案
- CS188-Project4
- 投影机拼接融合技术--UE4拼接
- 详解显式intent和隐式intent
- Mac Mini搭载苹果自研M1芯片 Mac Mini详细评测
- 运维工程师面试题整理——》 IDC机房运维
- 在 linux 中管理罗技优联接收器
- 马尔科夫链预测,Python实现
- 共享池,java池,大型池,PGA,SGA 笼统概念