数据库优化包括数据库的优化、数据库表的优化、程序操作的优化三个部分。本文是第三部分。

概述:程序访问优化也可以看作是访问SQL语句的优化。一个好的SQL语句可以减少程序的许多性能。列举了常见的错误习惯,并提出了相应的解决方案。

首先,算子优化
1。在,而不是在运算符中
存在和存在的性能区别于外部表和内部表,但建议用大数据量表中的存在代替。
不在索引中,不能被替换为不存在。
2。是null还是非空操作。
索引不是索引空值,所以这样的操作不能使用索引,它可以用其他方式处理,例如,数字类型,判断大于0,字符串类型设置一个默认值,确定它是否等于默认值。
三.运算符(<不等于)
它不等于运算符不使用索引,所以处理它只会产生全表扫描,而不是使用相同功能的其他经营业务,如<> 0而不是一个> 0或一>
4。在全文搜索中搜索文本数据,而不是像搜索
全文搜索总是比同类搜索更好:
(1)全文搜索使您能够实现类似于无法完成的复杂搜索,如搜索一个单词或短语、搜索与另一个单词或短语类似的单词或短语,或搜索同义词。
(2)实现全文检索比实现像搜索(特别是复杂搜索)更容易。

二、sql语句优化
1。不要在查询中使用select。
为什么我们不能使用它呢全世界的人都知道,但很多人都习惯了。我们必须知道我们可以储蓄和储蓄。
2。尽可能写出WHERE子句
尽量不要在没有位置的情况下编写SQL语句
三.在选择后注意WHERE子句
因为选择将数据插入临时表。这个过程锁定一些系统表。如果WHERE子句返回太多数据或太慢,它将导致系统表长时间锁定并插入其他进程。
4。对于聚合查询,可以使用带子句进一步限制返回的行。
5。避免使用临时表
(1)除非需要,尽可能避免临时表,相反,可以使用表变量。
(2)大多数时间(99%),表变量存储在内存中,所以速度比临时表快。临时表是驻扎在TempDb的数据库,所以操作临时表需要跨数据库通信,且速度慢。
6。减少访问数据库的次数:
在编程中,最好将一些全局变量表放在内存中,或者以其他方式减少数据库访问的数量。
7。尽量少工作。
尽量减少无效的工作,但这一点集中在客户机程序上,需要注意如下:
a,同一语句的多次执行,尤其是一些基本数据的多次执行,这是许多程序员很少注意到的。
B,减少多个数据转换,可能需要数据转换是一个设计问题,但减少的次数是程序员可以做的。
C、消除不必要的子查询和连接查询表,一般解释执行计划的外部连接,和额外的连接表带来的额外开销。
d,同一表在同一条件下的多个更新的组合,例如
将所有员工的名= 'haiwer'where emp_id =vpa30890f
更新员工设定模型= 'yang'where emp_id =vpa30890f
这两个语句应合并为以下语句
将所有员工的名= 'haiwer,模型=杨'
在emp_id = 'vpa30890f
e、更新操作不中断到删除操作+插入操作的形式,虽然功能是一样的,但性能差异很大。
f,不要写一些无意义的查询,例如
从1 = 2的雇员中选择*

三,使用原则
1)在以下两个SELECT语句中:
SELECT * FROM表1,田= 0;
SELECT * FROM表1,田> = 0和田< = 10000;
如果数据字段在数据表> = 0,第一个SELECT语句比第二选择语句更有效,因为第二选择语句消耗大量系统资源的第一个条件。
第一条原则:最严格的条件应放在WHERE子句的前面。
2)在以下SELECT语句中:
从制表符中选择*,…;
如果有索引索引(A,B,C),WHERE子句中字段的顺序应该与索引中字段的顺序一致。
第二个原则:WHERE子句中字段的顺序应与索引中字段的顺序一致。
下面的假设是,有田唯一索引I1,并有一个非唯一索引I2在专业。
3)选择3,结核病在田= 'sdf'fast径
SELECT * FROM字段= 'sdf'slow结核病,
因为后者将有额外的ROWID访问表后的索引扫描。
选择3,径从TB在田> = 'sdf'fast
选择3,结核病在田> 'sdf'slow径
因为前者可以快速定位索引。
选择3 2 %,结核病在like'r 'fast径
选择3,径从结核病专业是r'slow,
因为后者不使用索引。
4)使用诸如:
选择3,径从TB上(2)= 'rmn'do不使用索引。
如果一个表有二万条记录,则建议不使用该函数;如果表有超过五万条记录,则严格禁止该功能。对以下二万条记录没有限制。