sql规范

合集下载

sql规范

sql规范

sql规范SQL(Structured Query Language)是一种用于管理关系数据库的计算机语言。

虽然SQL是一种标准的语言,但是在实际应用中,不同的数据库管理系统可能会有一些差异。

为了提高代码的可读性和可维护性,制定了一些SQL规范。

下面是一个涵盖了SQL规范的大致指南,旨在帮助开发人员编写高质量的SQL代码。

1. 格式化代码:- 使用统一的缩进,通常是4个空格。

- 在代码中适当空格,使代码更易读。

- 使用大写字母或小写字母编写关键词,以提高可读性。

2. 使用明确的表别名:- 在SQL查询中,如果涉及多个表,为每个表使用明确的别名。

- 别名应该具有描述性,以便更好地理解查询意图。

3. 使用JOIN语句:- 避免使用传统的WHERE语句来连接表,而是使用JOIN语句。

- JOIN语句可以更清晰、更有效地表示表之间的关系。

4. 避免使用SELECT *:- 在查询中,尽可能明确地列出需要的列,而不是使用通配符*。

- 这样可以减少数据传输量,提高查询效率,并且使查询意图更加明确。

5. 避免使用子查询:- 子查询会增加查询的复杂性和执行时间。

- 尽量使用JOIN语句来代替子查询,以提高查询性能。

6. 使用合适的数据类型:- 在创建表时,选择适当的数据类型和长度。

- 这样可以减少存储空间的使用,并提高查询性能。

7. 对于NULL值的处理:- 在查询中,使用IS NULL或IS NOT NULL来测试NULL 值,而不是使用等号(=)。

- 这样可以更明确地表示查询的意图,并且使代码更易读。

8. 使用事务:- 当执行多个SQL操作时,将它们放在一个事务中。

- 这样可以确保数据的一致性,并提供可靠的回滚机制。

9. 编写注释:- 在代码中加入注释,解释SQL的意图和目的。

- 这样可以让其他开发人员更容易理解代码,并且在维护代码时更加方便。

10. 安全性考虑:- 在查询中,避免将用户输入直接插入SQL查询中,以免遭受SQL注入攻击。

sql规范

sql规范

SQL规范(整理)尽量不在数据库做运算,复杂的运算移到程序端CPU,尽可能简单应用MySql一年内的单表数据量预估:纯int不超过1000万,含char不超过500万合理分表:userId、date、area,建议单个数据库不超过300-400张表表字段数量少而精:IO高效、全局遍历、表修复快、提高并发、alter table,单表字段上限控制在20-50尽量满足三范式,适当时牺牲范式、加入冗余尽量少的或者避免使用:大SQL、大事务、大批量tinyint(1byte)smallint(2byte)mediumint(3byte)int(4byte)bigint(8byte)float(4byte)double(8byte)糟糕的用法:int(1)、bigint auto_increment、decimal(18,0)数字型比字符串型索引:更高效、查询更快、占用空间更小举个栗子:复选个人喜好时,可用喜好索引作为二进制数转十进制数存数据库优先使用枚举类型enum(可能值一直或者有限),enum占用1byte,tinyint也不错避免使用null字段,null列加索引需要额外的空间、含null复合索引无效尽量不用并拆分text/blob。

text类型效率远远低于varchar若必须使用可拆分到单独表中举个栗子:id int,data text避免在数据库存储图片谨慎合理使用索引:改善查询、减慢更新、索引不是越多越好不在索引列进行数学运算或者函数运算:where id+1=123 改成where id=123-1主键值不应该更新或者修改,忌用字符串作为主键,推荐使用独立业务的auto_increment 列或全局ID生成器做代理主键(oracle的sequence)尽量不用外键,由程序保证约束大SQL拆分为几个小SQL:小SQL缓存命中率更高,减少锁表时间特别是MyISAM,可能一条大SQL就能把整个数据库堵死保持事务(连接)短小精悍:即开即用、用完即关,与事务无关的操作放到事务外面、减少锁资源的占用,不破坏一致性的前提下、使用多个短事务代替长事务举个栗子:发帖时文件先上传,返回文件名称再提交表单数据尽可能少用存储过程、尽可能少用触发器、减少使用MySQL函数对结果进行处理,由代码处理尽量不用select *,只取需要的数据列,使用select/join减少临时表生成改写or为in:or效率O(n)、in效率O(Log n),注意控制n个数,建议小于200改写or为union:减少对不用字段的or查询举个栗子:where id=1 or cid=2 改成where id=1 union where cid=2避免负向查询:not in、<>、not like避免%前缀模糊查询:使用不了索引、导致全表扫描count(*)资源占用大,尽量少用推荐使用分页语句:limit 10,10 改成where id>10 limit 10同数据类型列值比较:where remark=123 改成where remark=‘123’避免在程序端对数据库显示加锁:外部锁对数据库不可控、高并发是灾难、极难调试和排查。

【转】sql表及字段命名规范

【转】sql表及字段命名规范

【转】sql表及字段命名规范1.数据库表命名规范:(1)表名前应该加上前缀,表的前缀⼀个⽤系统或模块的英⽂名称缩写,前缀全部⼤写或⾸字母⼤写,表名中包含的单词⾸字母⼤写。

(2)数据库表名应该有意义,并且易于理解,最好使⽤可以表达功能的英⽂单词或缩写,如果⽤英⽂单词表⽰,建议使⽤完整的英⽂单词。

(3)表名不可以太长,最好不要超过3个英⽂单词长度(22个字母)。

(4)在数据库表命名时应该⽤英⽂单词的单数形式,如员⼯表命名:应该为Employee⽽不是Employees .(5)如果是后台表命名时应该在表名基础上加上后缀_b(back ⾸字母 )(6)在表创建完成前,应该为表添加表的注释。

2.表字段命名规范:(1)数据库表字段应该是有意义⽽且易于理解的,最好是能够表达字段含义的英⽂字母(有⼈认为如果⽤英⽂单词作为字段,因为翻译⼯具不同,⽽字段不统⼀建议使⽤汉语拼⾳⾸字母缩写;有⼈认为⽤汉语拼⾳缩写看起来不直观,⽼半天也不知道到底这个字段是⼲什么的)(2)系统中所有属于内码,即仅⽤于标识唯⼀性和程序内部⽤到的标识性字段,字段名称建议取为 ID,采⽤类型为整型或长整型.(3)系统中属于是业务内的编号字段,代表⼀定业务信息,建议字段命名为code , 如⼯作单编号wf_code .(4) 不要在数据库表字段(列名)中包含数据类型,如:datetime(5)不要在数据库表字段(列名)命名时重复表名,可以使⽤表名⾸字母(不包含数据库表名前缀)注意:不要在数据库表字段(列名)命名时不建议使⽤数据库关键字,如:name,time ,datetime password 等3.表设计规范:(1)所有字段在设计时,除以下数据类型timestamp、image、datetime、smalldatetime、uniqueidentifier、binary、sql_variant、binary、varbinary外,必须有默认值。

SQL书写规范

SQL书写规范

一、SQL书写规范1、语句中出现的所有表名、字段名全部小写,系统保留字、内置函数名、Sql保留字大写。

2、连接符or、in、and、以及=、=等前后加上一个空格。

3、对较为复杂的sql语句加上注释,说明算法、功能。

注释风格:注释单独成行、放在语句前面。

(1) 应对不易理解的分支条件表达式加注释;(2) 对重要的计算应说明其功能;(3) 过长的函数实现,应将其语句按实现的功能分段加以概括性说明;(4) 每条SQL语句均应有注释说明(表名、字段名)。

(5) 常量及变量注释时,应注释被保存值的含义(必须),合法取值的范围(可选)(6) 可采用单行/多行注释。

(-- 或/* */ 方式)4、SQL语句的缩进风格(1) 一行有多列,超过80个字符时,基于列对齐原则,采用下行缩进(2) where子句书写时,每个条件占一行,语句令起一行时,以保留字或者连接符开始,连接符右对齐。

5、多表连接时,使用表的别名来引用列。

6、供别的文件或函数调用的函数,绝不应使用全局变量交换数据;7、变量令名不能超出ORACLE的限制(30个字符),令名要规范,要用英文令名,从变量上能看到变量的作用,如g名称全局变量m名称局部变量c名称光标p名称参数8、查找数据库表或视图时,只能取出确实需要的那些字段,不要使用*来代替所有列名。

要清楚明白地使用列名,而不能使用列的序号。

9、功能相似的过程和函数,尽量写到同一个包中,加强管理。

如例(1)二、书写优化性能建议1、避免嵌套连接。

例如:A = B and B = C and C = D2、where条件中尽量减少使用常量比较,改用主机变量3、系统可能选择基于规则的优化器,所以将结果集返回数据量小的表作为驱动表(from后边最后一个表)。

4、大量的排序操作影响系统性能,所以尽量减少order by和group by排序操作。

如必须使用排序操作,请遵循如下规则:(1) 排序尽量建立在有索引的列上。

sql语言的标准

sql语言的标准

sql语言的标准一、概述SQL(StructuredQueryLanguage)是一种用于管理关系数据库系统的标准语言。

它被广泛用于各种数据库管理系统,如MySQL、Oracle、SQLServer等。

本标准旨在规范SQL语言的使用和行为,以确保在不同的数据库管理系统之间的一致性和互操作性。

二、语法规则1.语句结构:SQL语句通常以一个或多个关键字开头,后面跟着表名、列名、条件、操作符和值等元素。

语句以分号结尾。

2.关键字:SQL关键字用于指定操作类型,如SELECT、INSERT、UPDATE、DELETE等。

3.表格和列:表格是SQL中的基本数据结构,由列和行组成。

列名是表格中每个单元格的名称,行是表格中的数据单元。

4.条件:条件用于筛选表格中的数据。

常用的条件包括等于、不等于、大于、小于、包含等。

5.操作符:操作符用于执行各种数据操作,如加法、减法、乘法、除法等。

6.排序和分组:SQL支持对表格数据进行排序和分组,以便对数据进行更高级的查询和分析。

三、标准内容1.语法规则:详细描述SQL语句的语法结构,包括关键字、表格和列的命名规则、条件和操作符的使用方法等。

2.数据类型:定义SQL支持的数据类型,包括数字、字符串、日期等。

3.查询语句:规定如何使用SELECT语句从表格中检索数据,包括通配符的使用、聚合函数的使用等。

4.插入语句:规定如何使用INSERT语句向表格中插入数据。

5.更新语句:规定如何使用UPDATE语句修改表格中的数据。

6.删除语句:规定如何使用DELETE语句删除表格中的数据。

7.事务处理:规定如何使用事务来确保数据库操作的原子性、一致性和隔离性。

8.安全性:规定如何使用SQL语句来保护数据库的安全性,包括用户身份验证、权限管理等。

9.性能优化:提供一些优化SQL语句的建议,以提高查询性能和响应速度。

四、标准实施1.数据库管理系统开发商:数据库管理系统开发商应遵循本标准,确保其产品支持SQL语言的规范使用。

SQL书写规范

SQL书写规范

SQL编程规范一、sql书写规范:二、书写优化性能建议三、其他经验性规则一、sql书写规范:1、sql语句的所有表名、字段名全部小写,系统保留字、内置函数名、sql保留字大写。

2、连接符or、in、and、以及=、<=、>=等前后加上一个空格。

3、对较为复杂的sql语句加上注释,说明算法、功能。

注释风格:注释单独成行、放在语句前面。

(1) 应对不易理解的分支条件表达式加注释;(2) 对重要的计算应说明其功能;(3) 过长的函数实现,应将其语句按实现的功能分段加以概括性说明;(4) 每条SQL语句均应有注释说明(表名、字段名)。

(5) 常量及变量注释时,应注释被保存值的含义(必须),合法取值的范围(可选)(6) 可采用单行/多行注释。

(-- 或/* */ 方式)4、SQL语句的缩进风格(1) 一行有多列,超过80个字符时,基于列对齐原则,采用下行缩进(2) where子句书写时,每个条件占一行,语句令起一行时,以保留字或者连接符开始,连接符右对齐。

5、多表连接时,使用表的别名来引用列。

6、供别的文件或函数调用的函数,绝不应使用全局变量交换数据;如例(1)二、书写优化性能建议1、避免嵌套连接。

例如:A = B and B = C and C = D2、where条件中尽量减少使用常量比较,改用主机变量3、系统可能选择基于规则的优化器,所以将结果集返回数据量小的表作为驱动表(from后边最后一个表)。

4、大量的排序操作影响系统性能,所以尽量减少order by和group by排序操作。

如必须使用排序操作,请遵循如下规则:(1) 排序尽量建立在有索引的列上。

(2) 如结果集不需唯一,使用union all代替union。

5、索引的使用。

(1) 尽量避免对索引列进行计算。

如对索引列计算较多,请提请系统管理员建立函数索引。

(2) 尽量注意比较值与索引列数据类型的一致性。

(3) 对于复合索引,SQL语句必须使用主索引列(4) 索引中,尽量避免使用NULL。

SQL及其规范

SQL及其规范

SQL及其规范SQL及其规范SQL(Structured Query Language结构化查询语⾔)是⼀种数据库查询语⾔和程序设计语⾔,主要⽤于管理数据库中的数据,如存取数据、查询数据、更新数据等。

SQL是专为数据库⽽建⽴的操作命令集,是⼀种功能齐全的数据库语⾔。

在使⽤它时,只需要发出"做什么"的命令,"怎么做"是不⽤使⽤者考虑的。

SQL功能强⼤、简单易学、使⽤⽅便,已经成为了数据库操作的基础,并且现在⼏乎所有的数据库均⽀持SQL。

<1> 在数据库系统中,SQL语句不区分⼤⼩写。

但字符串常量区分⼤⼩写。

建议命令⼤写,表名库名⼩写;<2> SQL语句可单⾏或多⾏书写,以";"结尾。

关键词不能跨多⾏或简写。

<3> ⽤空格和缩进来提⾼语句的可读性。

⼦句通常位于独⽴⾏,便于编辑,提⾼可读性。

SELECT * FROM tb_tableWHERE NAME="YUAN";<4> 注释:单⾏注释:--多⾏注释:/*......*/<5>SQL语句可以折⾏操作<6>SQL语⾔由DDL,DML,DQL和DCL组成(1)数据库定义语⾔(Data Definition Language,DDL)数据库定义语⾔主要⽤于定义数据库、表等,其中包括CREATE语句、ALTER语句和DROP语句。

CREATE语句⽤于创建数据库、数据表等,ALTER语句⽤于修改表的定义等,DROP语句⽤于删除数据库、删除表等。

(2)数据库操作语⾔(Data Mabipulation Language,DML)数据库操作语⾔主要⽤于数据库进⾏添加、修改、删除操作,其中包括INSERT语句、UPDATE语⾔和DELETE语句。

INSERT语句⽤于插⼊数据,UPDATE语句⽤于修改数据,DELETE语句⽤于删除数据。

SQL编写规范

SQL编写规范
4、 类型选择
如果字符具有明确的长度,使用nchar代替nvarchar;char代替varchar。
在只有两个可能数值时,使用bit代替int或smallint。
在SQL Server 2005中,使用nvarchar(MAX)代替ntext;varchar(MAX)代替text;varbinary(MAX)代替image。
9、语句换行
建议SQL代码每行以关键字或“'”开头。
10、 语句分割
使用一个(而不是两个)空行分隔 T-SQL 代码的逻辑块。
11、 使用“*”
尽量避免在任何代码中使用 “SELECT *”。
12、 表名别名
表名别名要简短,但意义要尽量明确。通常使用大写的表名作为别名,使用 AS 关键字指定表或字段的别名。
SQL编程对于操作数据库人员来说无疑是一种提高效率的方法,但是有些刚入门数据库管理人员对于编程的规范视而不见,他们总是认为达到自己想要的结果就好,可是他们却忽略了性能以及优化的问题,今天小编和大家分享一些SQL编写规范希望对大家有所帮助。
1、大小写
大写T-SQL 语言的所有关键字,谓词和系统函数。变量名称及游标名称使用Pascal样式。数据类型定义使用全部小写。
2、使用“;”
使用“;”作为 Transact-SQL 语句终止符。虽然分号不是必需的,但使用它是一种好的习惯。
3、存储格式
尽量采用Unicode数据存储格式,提高可移植性和兼容性,实际应用中尽量使用nchar、nvarchar、ntext代替char、varchar、text。
13、 类型转换
不要依赖任何隐式的数据类型转换,不要假定 T-SQL 会进行必要的转换。例如,把数字变量赋予字符值。相反,在为变量赋值或比较值之前,应使用适当的 CONVERT 函数使数据类型相匹配。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Sql规范一、数据库设计规范设计阶段可以说是系统性能的关键阶段1.1、数据库逻辑设计的规范化遵守数据的设计规范3NF 规定✧无重复的列要求表中的每一列只包含一个实例信息例如:员工信息表,不能将员工信息都放在一列中显示,也不能将其中的两列或多列在一列中显示;员工信息表的每一行只表示一个员工的信息,一个员工的信息在表中只出现一次。

✧表内的每一行都应该被唯一的标识(有唯一键)例如:员工信息表中加上了员工编号(UserId)列,因为每个员工的员工编号是唯一的,因此每个员工可以被唯一区分。

这个唯一属性列被称为主关键字或主键、主码。

✧表内不应该存储依赖于其他键的非键信息。

要求一个数据库表中不包含其他表中的非主键信息例如:一个部门信息表,其中每个部门有部门编号(DeptId)、部门名称、部门简介等信息。

那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。

如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。

1.2、合理的冗余没有冗余的数据库设计可以做到。

但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据例如:商品的基本表,如下所示“金额”这个字段的存在,表明该表的设计不满足第三范式,因为“金额”可以由“单价”乘以“数量”得到,说明“金额”是冗余字段。

但是,增加“金额”这个冗余字段,可以提高查询统计的速度,这就是以空间换时间的作法。

1.3、字段规范字段是数据库最基本的单位,其设计对性能的影响是很大的➢一行记录必须表内唯一,表必须有主键➢用尽量少的存储空间来存数一个字段的数据.数据类型尽量小,这里的尽量小是指在满足可以预见的未来需求的前提下。

例如能用int的就不用char或者varchar能用nvarchar(20)就不用nvarchar(500)➢字段必须定义合适的数据类型,以减少使用过程中的数据类型转换例如日期类型应用datetime 禁止用nvarchar➢尽量不要允许NULL,除非必要,可以用默认值代替➢尽量少用TEXT和IMAGE,二进制字段的读写是比较慢的➢枚举类型的字段,需要有comment 中文注释例如用户表中的用户状态用1、2、需要注释1:正常、2:禁止1.4、索引规范在设计阶段,可以根据功能和性能的需求进行初步的索引设计,这里需要根据预计的数据量和查询来设计索引。

➢根据数据量决定哪些表需要增加索引,数据量小的可以只有主键➢在合适的列上创建索引根据使用频率决定哪些字段需要建立索引,选择经常作为连接条件、筛选条件、聚合查询、排序的字段作为索引的候选字段。

优化器查找到WHERE子句或连接条件列上的索引,如果可用,可避免全表扫描➢使用窄索引对表编制大量索引会影响 INSERT、UPDATE、DELETE 和 MERGE 语句的性能,因为当表中的数据更改时,所有索引都须进行适当的调整。

例如如果某个列在几个索引中使用且您执行修改该列数据的UPDATE 语句,则必须更新包含该列的每个索引以及基础的基表(堆或聚集索引)中的该列。

总结A、避免对经常更新的表进行过多的索引,并且索引应保持较窄,就是说,列要尽可能少。

B、使用多个索引可以提高更新少而数据量大的查询的性能。

大量索引,可以提高不修改数据的查询(例如 SELECT 语句的性能)单表索引不能超过六个➢检查索引的数据类型索引列的数据类型也是很重要的。

例如在一个整数键值上的索引查询是非常快的,这是因为int数据类型的尺寸很小,而且算数操纵很容易二、程序书写规范2.1、大小写风格2.2 、注释规范注释总是加在程序的需要一个概括性说明或不易理解或易理解错的地方。

注释应语言简炼、易懂而又准确。

2.2.1、注释的书写规范可采用单行/多行注释。

(-- 或 /* */ 方式)2.2.2、源代码文件的注释✧在文件的头部必须标明程序名称,它所完成的主要功能。

✧文件的作者,及完成时间。

✧文件的状态:测试/未测试。

✧主要修改活动的修改人、时间、简单原因说明列表、版本号。

✧维护过程中需要修改程序时,应在被修改语句前面注明修改时间和原因说明。

例如:/**文件名:功能描述:状态:作者:完成时间:修改时间:修改:修改原因:**/2.2.3、语句注释✧应对不易理解的分支条件表达式加注释;✧不易理解的循环,应说明出口条件(有GOTO的程序还应说明入口条件);✧对重要的计算应说明其功能;✧过长的函数实现,应将其语句按实现的功能分段加以概括性说明;✧供别的文件或函数调用的函数,绝不应使用全局变量交换数据;✧每条SQL语句均应有注释说明2.2.4、常量和变量的注释注释说明放在常量和变量定义语句的后面2.3、缩进规则2.3.1、sql语句的缩进风格✧查询列表的书写风格一行有多列,超过80个字符时,基于列对齐原则,采用下行缩进SELECT col1,col2,....colm,coln,...✧WHERE 子句的书写规范①每个条件占一行②嵌套查询条件书写规范WHERE con1AND con2AND col3NOT IN(SELECT col3FROM t2WHERE......);✧SET/SELECT子句的书写规范每个表达式占一行select@sdate=convert(nvarchar(10),getdate()-1,120)+' 00:00:00', @edate=convert(nvarchar(10),getdate()-1,120)+' 23:59:59',@database='[jumipay_device_dx].[dbo]',@database1='[jumipay_base_dx].[dbo]',2.3.2、控制结构的缩进程序应以缩进形式展现程序的块结构和控制结构。

✧下列保留字的下一行缩进三格BEGIN、THEN、ELSE、ELSIF、LOOP✧下列保留字所在行前移三格END、ELSE、ELSIF、END IF、END LOOP2.4、例子/**文件名:ChageOrder功能描述:在订单支付失败时修改订单状态状态:已测试作者:XX完成时间:2016-10-28修改时间:修改:修改原因:**/create proc[dbo].[ChageOrder]ASDECLARE@sql nvarchar(4000)--执行语句set@sql='update [jmp_order]set o_state=-1-- dateadd(n,-30,getdate()) 获取当前时间减去30分钟的时间 where o_ctime < dateadd(n,-30,getdate())and o_state=0 '-- 修改订单生成日期小于当前时间(减去分钟)以及未支付的订单beginSET NOCOUNT ON;BEGIN tran ok--开始一个事务OKEXEC (@sql)if@@error<>0 --判断修改数据有没有出错begin--如果出错rollback tran-- 回滚事务到endelse--没有出错begincommit tran ok--提交事务endEND;GO三、sql 编程优化规则使用select的时候,避免使用*在解析的时候会将 *,依次转换为所有的列名。

如不需要查询所有的列名应明确列出所需要查询的列名✧COUNT(1) 、COUNT(*)、COUNT(col)A、Count(1)和Count(*) 实际的意思是:评估count()中的表达式是否为NULL,如果为NULL则不计数,而非NULL则会计数表上没有主键或者唯一索引,两者都是全表扫描表上有主键或者唯一键索引,两者都是走主键或者唯一索引并没有区别B、Count(col)则是统计 col 列中不为空的总行数,如果没有索引则全表扫描✧Union 和Union ALLUnion:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;Union All:对两个结果集进行并集操作,包括重复行,不进行排序;✧尽量避免在where子句中对字段进行NULL值判断,否则将导致引擎放弃使用索引而进行全表扫描例如:SELECT a_id,a_user_id,a_nameFROM jmp_appWHERE a_user_id is null可以在 a_user_id 上设置默认值0 ,确保表中a_user_id表没有用 null值然后可以这样查询SELECT a_id,a_user_id,a_nameFROM jmp_appWHERE a_user_id=0即:在where子句中使用is null 或 is not null的语句,引擎将放弃索引✧应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

✧避免使用or 做为索引条件,可以使用UNION代替例如:SELECT a_id,a_user_id,a_name,a_stateFROM jmp_appWHERE a_user_id=65 or a_name='益智乐园'可用下面语句替换SELECT a_id,a_user_id,a_name,a_stateFROM jmp_appWHERE a_user_id=65UNIONSELECT a_id,a_user_id,a_name,a_stateFROM jmp_appWHERE a_name='益智乐园'✧避免在索引列上使用计算和函数WHERE子句中,如果索引列是函数的一部分,优化器将不使用索引而使用全表扫描例如:SELECT a_id,a_user_id,a_name,a_stateFROM jmp_appWHERE a_id*10>200可以这样写SELECT a_id,a_user_id,a_name,a_stateFROM jmp_appWHERE a_id>200/10即:任何对索引列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。

✧In 与between andin会使系统无法使用索引,而只能直接搜索表中的数据如对于连续的数值可以用 between andSELECT a_id,a_user_id,a_name,a_stateFROM jmp_appWHERE a_user_id in(1,2,3,4,5,6,7,8,9,10)可换成SELECT a_id,a_user_id,a_name,a_stateFROM jmp_appWHERE a_user_id between 1 and 10✧In 与EXISTSEXISTS只返回TRUE和False,不返回列表的值。

相关文档
最新文档