选取最适用的字段属性
可能的情况下,应该尽量把字段设置为NOTNULL,这样在将来执行查询的时候,数据库不用去比较NULL值
使用连接(JOIN)来代替子查询(Sub-Queries)
虽然使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,并且写起来也很容易,但是有些情况下子查询可以被更有效率的连接(JOIN)..替代,比如在查询用户订单的时候,使用连接的效果就比子查询要好得多。
使用联合(UNION)来代替手动创建的临时表
它可以把需要使用临时表的两条或更多的select查询合并的一个查询中。在客户端的查询会话结束的时候,临时表会被自动删除,从而保证数据库整齐、高效。使用union来创建查询的时候,我们只需要用UNION作为关键字把多个select语句连接起来就可以了
使用事务
当一个语句块中的某一条语句运行出错的时候,整个语句块的操作就会变得不确定起来,会造成数据的不完整,甚至会破坏数据库中的数据。要避免这种情况,就应该使用事务,这时候事物的作用就是要么语句块中每条语句都操作成功,要么都失败。换句话说,就是可以保持数据库中数据的一致性和完整性
锁定表
尽管事务是维护数据库完整性的一个非常好的方法,但却因为它的独占性,有时会影响数据库的性能,尤其是在很大的应用系统中在有些情况下我们可以通过锁定表的方法来获得更好的性能
使用外键
锁定表的方法可以维护数据的完整性,但是它却不能保证数据的关联性。这个时候我们就可以使用外键
使用索引
索引是提高数据库性能的常用方法,它可以令数据库服务器以比没有索引快得多的速度检索特定的行,尤其是在查询语句当中包含有MAX(),MIN()和ORDERBY这些命令的时候,性能提高更为明显
优化的查询语句
对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
应尽量避免在 where 子句中使用 or 来连接条件in 和 not in 也要慎用,否则会导致全表扫描
应尽量避免在 where 子句中对字段进行表达式操作
尽量避免在where子句中对字段进行函数操作
当我们优化查询语句的时候注意以下几点:
首先,最好是在相同类型的字段间进行比较的操作
其次,在建有索引的字段上尽量不要使用函数进行操作
最后,应该注意避免在查询中让MySQL进行自动类型转换,因为转换过程也会使索引变得不起作用
选取最适用的字段属性
可能的情况下,应该尽量把字段设置为NOTNULL,这样在将来执行查询的时候,数据库不用去比较NULL值
使用连接(JOIN)来代替子查询(Sub-Queries)
虽然使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,并且写起来也很容易,但是有些情况下子查询可以被更有效率的连接(JOIN)..替代,比如在查询用户订单的时候,使用连接的效果就比子查询要好得多。
使用联合(UNION)来代替手动创建的临时表
它可以把需要使用临时表的两条或更多的select查询合并的一个查询中。在客户端的查询会话结束的时候,临时表会被自动删除,从而保证数据库整齐、高效。使用union来创建查询的时候,我们只需要用UNION作为关键字把多个select语句连接起来就可以了
使用事务
当一个语句块中的某一条语句运行出错的时候,整个语句块的操作就会变得不确定起来,会造成数据的不完整,甚至会破坏数据库中的数据。要避免这种情况,就应该使用事务,这时候事物的作用就是要么语句块中每条语句都操作成功,要么都失败。换句话说,就是可以保持数据库中数据的一致性和完整性
锁定表
尽管事务是维护数据库完整性的一个非常好的方法,但却因为它的独占性,有时会影响数据库的性能,尤其是在很大的应用系统中在有些情况下我们可以通过锁定表的方法来获得更好的性能
使用外键
锁定表的方法可以维护数据的完整性,但是它却不能保证数据的关联性。这个时候我们就可以使用外键
使用索引
索引是提高数据库性能的常用方法,它可以令数据库服务器以比没有索引快得多的速度检索特定的行,尤其是在查询语句当中包含有MAX(),MIN()和ORDERBY这些命令的时候,性能提高更为明显
优化的查询语句
对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
应尽量避免在 where 子句中使用 or 来连接条件in 和 not in 也要慎用,否则会导致全表扫描
应尽量避免在 where 子句中对字段进行表达式操作
尽量避免在where子句中对字段进行函数操作
当我们优化查询语句的时候注意以下几点:
首先,最好是在相同类型的字段间进行比较的操作
其次,在建有索引的字段上尽量不要使用函数进行操作
最后,应该注意避免在查询中让MySQL进行自动类型转换,因为转换过程也会使索引变得不起作用