mysql如何优化?mysql性能调优经验分享!

KLQ 2020-05-14 10:51:38 java常见问答 6002

之前给大家介绍了四种mysql性能优化方面的方案,下面要继续的给大家这方面的内容,一起来了解一下,还有哪些优化方案吧!

1、使用外键

锁定表的方法能够维护数据的完整性,可是却不可以保证数据的相关性,所以,这个时候,我们就完全可以使用外键。

例:

外键能够保证每一条销售记录都指向某一个存在的客户。

这里的话外键能够将ustomerinfo表当中的customerid映射到salesinfo表中customerid,任何一条不合法customerid的记录都不会被插入或者是更新到salesinfo当中。

CREATE  TABLE   customerinfo( customerid   int primary key) engine = innodb;
 
CREATE  TABLE   salesinfo( salesid int not null,customerid  int not null, primary key(customerid,salesid),
foreign key(customerid)  references  customerinfo(customerid) on delete cascade)engine = innodb;

2、优化的查询语句

在大多数的情况之下,使用索引能够将查询的速度提高,但是,假如sql语句使用不恰当的话,索引将不会发挥出它的作用。

下面的几个方面大家一定要注意了!

(1)尽量在相同类型的字段间进行比较的操作

(2)在建有索引的字段上尽量不要使用函数进行操作

(3)在搜索字符型字段的时候,有的时候,我们会使用到LIKE关键字和通配符,这样的方式虽然说会很简单,但是,却也是以牺牲系统性能来作为代价的!

例:

查询将会比较表中的每一条记录

SELECT  *  FROM  books  WHERE  name  like   "MySQL%"

可是,假如换用下面的查询,返回的结果一样,可是,速度方便就要提升了很多

SELECT  *  FROM  books  WHERE  name >=  "MySQL"  and  name  <"MySQM"

最后,我们应该要注意避免在查询中让MySQL进行自动类型转换,因为转换过程也会使索引变得不起作用。

3、锁定表

在有的情况之下,我们能够通过锁定表的方法来获得更好的性能。

例:

LOCK TABLE inventory WRITE SELECT quantity  FROM   inventory   WHERE Item='book';
 
...
 
UPDATE   inventory   SET   Quantity=11   WHERE  Item='book';UNLOCKTABLES

这里的话,我们用一个select语句取出初始数据,通过一些计算,用update语句将新值更新到表中。

包含有WRITE关键字的LOCKTABLE语句能够保证在UNLOCKTABLES命令被执行之前,不会有其它的访问来对inventory进行更新、插入或者是删除的操作。

4、索引

索引是提高数据库性能非常常见的方式,索引能够将数据库服务器以比没有索引快得多的速度检索特定的行。

尤其是在查询语句当中包含有MAX(),MIN()和ORDERBY这些命令时,性能提高的会更加的明显。

那么,又有哪些字段应该建立索引呢?

通常的话,索引应建立在那些将用于JOIN,WHERE判断和ORDERBY排序的字段上。

以上的几种方案你都了解了吗?欢迎继续关注本站,更多关于java架构师的知识,可以给大家分享哦!

推荐阅读:

mybatis分页如何实现?有几种常用分页方式?

tomcat优化配置该怎么优化?

JVM调优工具有哪些?主要功能都是什么?