SQL优化 「爱情、让人受尽委屈。」 2021-06-24 16:10 347阅读 0赞 1.在查询时,应该尽量避免全表扫描,应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将导致数据库引擎放弃使用索引而进行全表扫描。 3.应尽可能避免在where子句中对字段进行 null 值判断,否则将导致数据库引擎放弃使用索引而进行全表扫描,如: select score from student where id is null 可以在id上设置默认值0,确保表中id列没有null值,然后这样查询: select score from student where id=0 4…应尽量避免在 where 子句中使用 or 来连接条件,否则将导致数据库引擎放弃使用索引而进行全表扫描,如: select score from student where id=5 or id=50 可以改成使用union all进行查询: select score from student where id=5 union all select score from student where id=50 [5.in][] 和 not in 也尽量少用,否则会导致全表扫描,如: select score from student where id in(5,6,7,8) 对于连续的数值,能用 between 就不要用 in : select score from student where id between 5 and 8 6.使用模糊查询时,当查询关键字的左边出现“%”也会导致全表扫描,应尽量不要在关键字左边进行模糊操作,如: select id from student where name like '%abc%' 应该这样查询: select id from student where name like 'abc%' 7.应尽量避免在 where 子句中对字段进行表达式操作,这将导致数据库引擎放弃使用索引而进行全表扫描。如: select score from student where id/2=50 应改为: select score from student where id=50*2 8.应尽量避免在where子句中对字段进行函数操作,这将导致数据库引擎放弃使用索引而进行全表扫描。如: select id from student where substring(name,1,3)='abc'--名字以abc开头的id 应改为: select id from student where name like 'abc%' 9.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。 10.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。 11.不要写一些没有意义的查询,如需要生成一个空表结构: select column1,column2 into #temp from t where 1=0 这类代码不会返回任何结果集,但是会消耗系统资源,应改成这样: create table #t(...) 12.尽量用 exists 代替 in ,如: select num from s1 where num in(select num from s2) 应改为: select num from s1 where exists(select 1 from s2 where num=s1.num) 13.并不是所有索引对查询都有效,SQL是根据表中的数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。 14.索引并不是越多越好,索引虽然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。 15.尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。 16.尽可能的使用 varchar 代替 char ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要更高一些。 17.不要使用 select \* from t ,用具体的字段列表代替“\*”,不要返回用不到的任何字段。 18.避免频繁创建和删除临时表,以减少系统表资源的消耗。 19.临时表的使用要谨慎,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时可以使用临时表。但是,对于一次性事件,最好使用导出表。 20.在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度。如果数据量不大,为了缓和系统表的资源,应先create table,然后再insert。 21.如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。 22.尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写。 23.使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效。 24.与临时表一样,游标并不是不可使用。对小型数据集使用 FAST\_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时,在结果集中包括“合计”的例程通常要比使用游标执行的速度快。 25.尽量避免大事务操作,提高系统并发能力。 26.尽量避免向客户端返回大数据量。 [5.in]: http://5.in
相关 SQL优化(三):SQL优化实战 前两节基本是讲了SQL优化重要的工具大概思路,你连explain都看不明白,遇到慢查询一个SQL执行半天的情况,估计优化起来肯定无处着手。 这节主要是SQL优化的具体实战,常 小灰灰/ 2022年10月19日 04:18/ 0 赞/ 259 阅读
相关 【sql】sql优化 1. 要尽量避免 NULL 要尽可能地把字段定义为 NOT NULL。即使应用程序无须保存 NULL(没有值),也有许多表包含了可空列(Nullable Col ゝ一纸荒年。/ 2022年06月14日 20:48/ 0 赞/ 316 阅读
相关 SQL优化 网上关于SQL优化的教程很多,但是比较杂乱。近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充。 这篇文章我花费了大量的时间查找资料、修 男娘i/ 2021年11月09日 21:52/ 0 赞/ 400 阅读
相关 SQL优化 数据库优化的层次 SQL与索引 存储引擎与表结构 数据库架构/缓存 MySQL/Oracle配置 硬件与操作系统 引起全表扫描和低效率的SQL 约定不等于承诺〃/ 2021年11月04日 22:20/ 0 赞/ 397 阅读
相关 sql优化 1, 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2,应尽量避免在 where 子句中对字段进行 null 值判 蔚落/ 2021年09月28日 00:58/ 0 赞/ 414 阅读
相关 SQL优化 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断 落日映苍穹つ/ 2021年09月21日 01:26/ 0 赞/ 445 阅读
相关 sql优化 记录一下看到的适用于mysql语句的优化 1、查询 SQL 尽量不要使用 select \,而是 select 具体字段 反例子: select from e 曾经终败给现在/ 2021年09月01日 08:59/ 0 赞/ 464 阅读
相关 sql优化 1、all: 全表扫描,遍历全表找到匹配的行 index:索引全扫描,遍历整个索引来查询匹配的行 range:索引范围扫描,常见于<,>,>=,between等操作符 ... 系统管理员/ 2021年03月30日 16:03/ 0 赞/ 661 阅读
相关 sql优化 文章连接 [https://blog.csdn.net/jie\_liang/article/details/77340905][https_blog.csdn.net_... 朱雀/ 2021年01月24日 18:01/ 0 赞/ 697 阅读
还没有评论,来说两句吧...