不论是何种语言的编程人员,都会接触到SQL语句,SQL语句简单来说其实就是增删改查,但其中却充满了细节,尤其是大型网站,对查询速度是十分 1、避免全表扫描,首先考虑在where及orderby的列上建立索引。
2、尽量避免在where子句中使用!=或操作符,MySQL只有对以下操作符才使用索引:,=,=,,=,BETWEEN,IN,以及某些时候的LIKE。
3、尽量避免在where子句中使用or来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,可以使用UNION合并查询。
4、in和notin也要慎用,否则会导致全表扫描,对于连续的数值,能用between就不要用in了。
5、如果在where子句中使用参数,也会导致全表扫描。
6、尽量避免在where子句中对字段进行表达式操作,应尽量避免在where子句中对字段进行函数操作。
7、索引虽然可以提高相应的select的效率,但同时也降低了insert及update的效率,因为insert或update时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。
8、尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。
9、尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。
10、常见的简化规则如下:不要有超过5个以上的表连接(JOIN),考虑使用临时表或表变量存放中间结果。少用子查询,视图嵌套不要过深,一般视图嵌套不要超过2个为宜。
11、用OR的字句可以分解成多个查询,并且通过UNION连接多个查询。他们的速度只同是否使用索引有关,如果查询需要用到联合索引,用UNIONall执行的效率更高.多个OR的字句没有用到索引,改写成UNION的形式再试图与索引匹配。一个关键的问题是否用到索引。
12、尽量使用“=”,不要使用“”。
13、尽量使用exists代替selectcount(1)来判断是否存在记录,count函数只有在统计表中所有行数时使用,而且count(1)比count(*)更有效率。
14、sql语句用大写,因为oracle总是先解析sql语句,把小写的字母转换成大写的再执行。
15、别名的使用,别名是大型数据库的应用技巧,就是表名、列名在查询中以一个字母为别名,查询速度要比建连接表快1.5倍。
16、避免死锁,在你的存储过程和触发器中访问同一个表时总是以相同的顺序;事务应经可能地缩短,在一个事务中应尽可能减少涉及到的数据量;永远不要在事务中等待用户输入。
17、MySQL查询可以启用高速查询缓存。这是提高数据库性能的有效Mysql优化方法之一。当同一个查询被执行多次时,从缓存中提取数据和直接从数据库中返回数据快很多。
18、任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。