1、选取最适用的字段属性
例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了。同样的,如果可以的话,我们应该使用MEDIUMINT而不是 BIGIN来定义整型字段。
另外一个提高效率的方法是在可能的情况下,应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。
对于某些文本字段,例如“省份”或者“性别”,我们可以将它们定义为ENUM类型。因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。这样,我们又可以提高数据库的性能。
2使用JOIN代替子查询
因为 MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作。
3 使用索引
索引是提高数据库性能的常用方法,它可以令数据库服务器以比没有索引快得多的速度检索特定的行,尤其是在查询语句当中包含有MAX(), MIN()和ORDERBY这些命令的时候,性能提高更为明显。
那该对哪些字段建立索引呢?一般说来,索引应建立在那些将用于JOIN, WHERE判断和ORDER BY排序的字段上。尽量不要对数据库中某个含有大量重复的值的字段建立索引。对于一个ENUM类型的字段来说,出现大量重复值是很有可能的情况,例如 customerinfo中的“province”.. 字段,在这样的字段上建立索引将不会有什么帮助;相反,还有可能降低数据库的性能。我们在创建表的时候可以同时创建合适的索引,也可以使用ALTER TABLE或CREATE INDEX在以后创建索引。
1) 建表的优化
1 建表时尽量根据实际业务去选择合适的字段 比如mediumint,int,bigint. 选择 char 还是 varchar char有固定的长度,而varchar属于可变长的字符类型
char 存储固定长度的字符 查询 速度快 因为它不需要记录 存储内容的长度 但是varchar查询就慢 因为它不仅存储数据还要记录所存内容的长度 +1
2) 查询语句的优化
1 对查询的条件添加索引
2 对查询条件中 有like的 尽量不要用前% 去查询 这样会使索引失效
3 一条查询语句最好不要超过5个以上的表连接 如果超过5个表连接说明设计上是有缺陷的
4 考虑使用临时表 视图来存储中间结果
5 尽量少用子查询
6 视图 嵌套不要太深 不要超过2个为宜
XXX 如果一定需要连接很多表才能得到数据,那么很可能意味着设计上的缺陷。
3) 返回结果集的优化
要尽量减少数据的返回行 包括行和列 返回结果越大 意味着响应的sql语句的 logical reads (逻辑读取)就越大 对服务器的性能影响就越甚
一个很不好的设计就是返回表的所有数据:
Select * from tablename
4)使用存储过程
可以考虑使用存储过程封装那些复杂的SQL语句或商业逻辑,这样做有几个好处。
一是存储过程的执行计划可以被缓存在内存中较长时间,减少了重新编译的时间。
二是存储过程减少了客户端和服务器的繁复交互。
三是如果程序发布后需要做某些改变你可以直接修改存储过程而不用修改程序,避免需要重新安装部署程序。
5) 最后就是根据具体的业务去查询复杂sql的执行计划
EXPLAIN SELECT * FROM house t WHERE t.inn_id = (SELECT n.id FROM inn n WHERE n.id = 1)
转载请注明原文地址: https://ju.6miu.com/read-1213.html