之前给大家介绍了四种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架构师的知识,可以给大家分享哦!
推荐阅读: