MySQL优化建议汇总~~~

MySQL优化建议汇总~~~


1、将经常要用到的字段(比如经常要用这些字段来排序,或者用来做搜索),则最好将这些字段设为索引

2、字段的种类尽可能用int或者tiny int类型。另外字段尽可能用not null

3、当然无可避免某些字段会用到text,varchar等字符类型,最好将text字段单独出另外一个表出来(用主键关联好)(能用枚举的就尽量不要用text因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多

4、 字段的类型,以及长度,是一个很考究开发者优化功力的一个方面。如果表数据有一定的量了,不妨用PROCEDURE ANALYSE()命令来取得字段的优化建议!(在phpmyadmin里可以在查看表时,点击‘Propose table struture’来查看这些建议)如此可以让你的表字段结果趋向完善。

5、select * 尽量少用,你想要什么字段,就select什么字段出来,不要老是用*号!同理,只要一行数据时尽量使用limit 1

6、绝对不要轻易用order by rand(),很可能会导致mysql的灾难

7、每个表都应该设置一个ID主键,最好的是一个INT型,并且设置上自动增加的AUTO_INCREMENT标志,这点其实应该作为设计表结构的第一件必然要做的事!

8、拆分大的DELETE或INSERT语句,因为这两个操作是会锁表的,表一锁住了,别的操作都进不来了,就我来说有时候我宁愿用for循环来一个个执行这些操作

9、不要用永久连接mysql_pconnet();除非你真的非常肯定你的程序不会发生意外,不然很可能也会导致你的mysql死掉

10、永远别用复杂的mysql语句来显示你的聪明,就我来说看到一次关联了三四个表的语句,只会让人觉得很不靠谱(MySQL语句能简单就简单点)

参考博文:https://mp.weixin.qq.com/s/4U8xw9Q0cEStNfArjXQCIQ



了解一下Oracle中sql语句的执行过程,也有利于掌握Oracle的优化:


ORACLE将执行过的SQL语句存放在内存的共享池(shared buffer pool),可以被所有的数据库用户共享。当执行一个SQL语句时,如果它和之前的执行过的语句完全相同,ORACLE就能很快获得已经被解析的语句以及最好的执行路径.。这个功能大大地提高了SQL的执行性能并节省了内存的使用。



OracleSQL语句执行过程:

 

1.当一用户第一次提交一个SQL表达式时,Oracle会将这SQL进行Hard parse,检查语法、表名、字段名等相关信息,这过程会花比较长的时间,因为它要分析语句的语法与语义。然后获得最优化后的执行计划,并在内存中分配一定的空间保存该语句与对应的执行计划等信息。

 

2.当用户第二次请求或多次请求时,Oracle会自动找到先前的语句与执行计划,而不会进行Hard parse,而是直接进行Soft parse(把语句对应的执行计划调出,然后执行),从而减少数据库的分析时间。

 

那么在第一次运行的过程中,ORACLE sql 的处理过程大致如下:

 

1.运用HASH算法,得到一个HASH值。

 

2.shared pool 中的 library cache 中查找是否有相同的HASH值,如果存在,则无需硬解析,进行软解析。

 

3.如果shared pool不存在此HASH值,则进行语法检查,查看是否有语法错误。

 

4.如果没有语法错误,就进行语义检查,检查该SQL引用的对象是否存在,该用户是否具有访问该对象的权限。

 

5.如果没有语义错误,对该SQL进行解析,生成解析树,执行计划。

 

6.生成ORACLE能运行的二进制代码,运行该代码并且返回结果给用户。

 

注意:Oracle中只能完全相同的语句,包大小写、空格、换行都要求一样时,才会重复使用以前的分析结果与执行计划。

 

分析过程如下图:




 

对于大量的、频繁访问的SQL语句,如果不采用Bind 变量的方式,Oracle会花费大量的Shared latchCPU在做Hard parse处理。

 

所以,要尽量提高语句的重用率,减少语句的分析时间,通过了解Oracle SQL语句的分析过程可以明白Oracle的内部处理逻辑,并在设计与实现上进行SQL语句优化。


参考博文:https://mp.weixin.qq.com/s/O6bWmIOFk6KGrrW4uBeMTA


几种常用的SQL优化技巧。


WHERE下多个过滤条件的排列顺序

重复记录的处理

WHERE、HAVING和ON的比较

灵活使用EXISTS关键字

UNION ALL和UNION

表关联的优化

参考博文:https://mp.weixin.qq.com/s/NfwWibH7JO1w98OiHJcxyg(有实例,挺详细的)


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java泛型初探————泛型通配

T ? K V E?——表示不确定的Java类型 T——表示Java类型 K、V——分别代表键-值中的Key-Value&#xff0c;例如Map<K,V>&#xff0c;put(K key, V value) E——代表Element&#xff0c;例如List<E>&#xff0c;add(E e)java.lang.ClassClass类的实例…

谈谈 final、finally、 finalize 有什么不同?

谈谈 final、finally、 finalize 有什么不同&#xff1f;final 可以用来修饰类、方法、变量&#xff0c;分别有不同的意义&#xff0c;final 修饰的 class 代表不可以继承扩展&#xff0c;final 的变量是不可以修改的&#xff0c;而 final 的方法也是不可以重写的&#xff08;o…

Spring Boot————静态方法如何调用Spring容器中的Bean

问题分析 在使用静态方法的时候&#xff0c;某些情况下&#xff0c;需要使用类似自动注入的Bean来实现某些业务逻辑。 一般的非静态方法&#xff0c;可以很容易的通过在方法所在的类中Autowired自动将依赖的Bean注入到本类中&#xff0c;并操作。 静态方法在使用同样的操作流…

Java 集合Collection常见知识点汇总~

看了一些所谓大公司的JAVA面试问题&#xff0c;发现对于JAVA集合类的使用都比较看重似的&#xff0c;而自己在这方面还真的是所真甚少&#xff0c;抽空也学习学习吧。 java.util包中包含了一系列重要的集合类&#xff0c;而对于集合类&#xff0c;主要需要掌握的就是它的内部结…

内部类详解————匿名内部类

内部类三连击&#xff1a; 《内部类详解————匿名内部类》 《内部类详解————局部内部类》 《内部类详解————静态嵌套类》 应用场景 由于匿名内部类不利于代码的重用&#xff0c;因此&#xff0c;一般在确定此内部类只会使用一次时&#xff0c;才会使用匿名内部…

内部类详解————局部内部类

内部类三连击&#xff1a; 《内部类详解————匿名内部类》 《内部类详解————局部内部类》 《内部类详解————静态嵌套类》 定义 在方法或某个作用域内的内部类&#xff0c;称为局部内部类。匿名内部类就是一种局部内部类。 实现方式 public class OutterType …

关于面向对象以及三大特征的解释

关于面向对象以及三大特征的解释面向对象&#xff1a;在C语言编程中是面向过程而在Java编程中是面向对象的。面向过程更重要的是看重实现的具体过程&#xff0c;面向对象看重的是结果&#xff0c;不管其里面的具体过程&#xff0c;只看结果。举一个例子&#xff1a;我们从住的地…

内部类详解————静态内部类

内部类三连击&#xff1a; 《内部类详解————匿名内部类》 《内部类详解————局部内部类》 《内部类详解————静态内部类》 定义 静态内部类&#xff0c;又叫静态嵌套类或嵌套类。是使用static关键字修饰的内部类。 静态内部类可以用 private 修饰&#xff0c;这…

jvm gc垃圾回收机制和参数说明amp;amp;Java JVM 垃圾回收(GC 在什么时候,对什么东西,做了什么事情)

jvm gc&#xff08;垃圾回收机制&#xff09; Java JVM 垃圾回收&#xff08;GC 在什么时候&#xff0c;对什么东西&#xff0c;做了什么事情&#xff09; 前言&#xff1a;&#xff08;先大概了解一下整个过程&#xff09;作者&#xff1a;知乎用户 链接&#xff1a;https:…

【Mathematical Model】Ransac线性回归Python代码

Ransac算法&#xff0c;也称为随机抽样一致性算法&#xff0c;是一种迭代方法&#xff0c;用于从一组包含噪声或异常值的数据中估计数学模型。Ransac算法特别适用于线性回归问题&#xff0c;因为它能够处理包含异常值的数据集&#xff0c;并能够估计出最佳的线性模型。 1 简介 …

异常解析————Parameter metadata not available for the given statement

引言 在将数据存入mysql数据库时抛出异常&#xff1a;Parameter metadata not available for the given statement。参数元数据对于给定的声明不可用。 SQL本身并没有错误&#xff1a; Autowiredprivate JdbcTemplate jdbc;public Integer saveScenicSequence(ScenicSequence…

Java中HashMap的常用操作

Java中HashMap的常用操作HashMap<Integer, Integer> hashMap new HashMap<>();hashMap.put(5, 2);hashMap.put(9, 2);hashMap.put(8, 1);hashMap.put(7, 3);hashMap.put(16, 1);hashMap.put(10, 2);hashMap.put(6, 2);//其实下面两个键值对是没有存的hashMap.put(…

MySQL忽略主键冲突,避免重复插入数据的三种方式

方案一&#xff1a;ignore 插入时检索主键列表&#xff0c;如存在相同主键记录&#xff0c;不更改原纪录&#xff0c;只插入新的记录。 INSERT IGNORE INTO ignore关键字所修饰的SQL语句执行后&#xff0c;在遇到主键冲突时会返回一个0&#xff0c;代表并没有插入此条数据。…

SQL分页查询的介绍以及好处~~

SQL分页查询的介绍以及好处~~分页查询就是将过多的结果在有限的界面上分多页来显示&#xff0c;一般将分页查询分为两类&#xff1a; 逻辑分页、物理分页。 逻辑分页是在用户第一次访问时&#xff0c;将数据库的所有记录全部查询出来&#xff0c;添加到一个大集合中&#xff0c…

Swagger使用————接口参数注解的使用缺陷

问题描述 在使用springboot开发web项目时&#xff0c;用到了swagger框架&#xff0c;来生成web api文档。但是其中有一项是举例说明参数的结构&#xff0c;如下图&#xff1a;但是&#xff0c;这个功能真的是非常方便&#xff0c;因为可以让前端开发人员第一时间得知参数的内部…

分布式事务最终一致性常用方案

分布式事务最终一致性常用方案目前的应用系统&#xff0c;不管是企业级应用还是互联网应用&#xff0c;最终数据的一致性是每个应用系统都要面临的问题&#xff0c;随着分布式的逐渐普及&#xff0c;数据一致性更加艰难&#xff0c;但是也很难有银弹的解决方案&#xff0c;也并…

数据列表的分页实现————分页敏捷开发

概要 分页功能是比较常见的基础功能&#xff0c;虽然比较简单&#xff0c;但是每次需要用到这个功能的时候还是需要现写一遍。为了实现更加宏观的业务复用&#xff0c;特将本人特别喜欢的简易分页逻辑在此记述&#xff0c;以备日后重用。 逻辑描述 一般的分页实现方式多是通…

Java基础————理解Integer对象的缓存策略

一个简单的面试题public static void main(String[] args) {Integer in1 100;Integer in2 100;Integer in3 200;Integer in4 200;System.out.println(in1 in2);System.out.println(in3 in4);} 运行结果&#xff1a; true false 从自动装箱谈Integer缓存 上述面试题中&…

Java面试日常总结大杂烩

日常总结大杂烩&#xff1a;一。 取出特定行数的数据1. select* from 表名 limit m,n; 2. select * from 表名 limit [offset,] rows;1. m代表从m1条记录行开始检索&#xff0c;n代表取出n条数据。&#xff08;m可设为0&#xff09;如&#xff1a;select * from表名 limit 6,5…

Eclipse深度患者设置VSCode快捷键

VSCode设置Eclipse中常用的快捷键 将eclipse中一些基本的快捷键输入右侧用户快捷键设置中&#xff1a; // Place your key bindings in this file to overwrite the defaults [{ "key": "alt/", "command": "editor.action.triggerSugges…