推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

怎样创建索引数最好不要超过6个列上建索引

   2023-06-04 网络整理佚名1610
核心提示:在where字句中,如果索引列是计算或者函数的一部分,DBMS的优化器将不会使用索引而使用全表查询,函数属于计算的一种,同时在in和中通常情况下使用,因为in不走索引tran套住的SQL语句太多,那数据库的性能就糟糕了。以上就是数据库SQL调优的几种方式是什么的详细内容,更多请关注php中文网其它相关文章!

方法: 1、创建索引时,尽量避免全表扫描; 2. 避免对指数使用计算; 3、尽量使用参数化SQL; 4、尝试将多条SQL语句压缩成一条SQL语句; 5.使用where子句替换单词; 6、连接多个表时,使用表的别名; 7、尽量避免使用游标等。

本教程的运行环境:系统、版本、戴尔G3电脑。

1.创建索引

1.尽量避免全表扫描,首先考虑对where和order by涉及的列建索引

2、(1)对经常需要检索的字段建立索引。 例如,如果要根据表字段进行查找,那么就应该在name字段上创建索引。 如果经常需要根据员工部门和员工职位级别进行查找,那么应该在员工部门和员工职位级别这两个字段上创建索引。

(2) 创建索引给检索带来的性能提升往往是巨大的,所以当你发现检索速度太慢时,首先应该想到创建索引。

(3)一张表中的索引最好不要超过6个。 如果过多,就要考虑是否有必要在一些不常用的列上建立索引。 索引越多越好,索引可以提高相应的效率,但同时也降低了效率,因为索引可能会不时重建,所以如何建立索引需要慎重考虑,具体情况而定。

2.避免对索引使用计算

在where子句中,如果索引列是计算或函数的一部分,DBMS优化器将不会使用索引而是使用全表查询。 函数是一种计算,一般用在in和in中,因为in不是go index

低效率:

 select * from user where salary*22>11000(salary是索引列)

登录复制

高效的:

 select * from user where salary>11000/22(salary是索引列)

登录复制

3.使用预编译查询

程序通常根据用户的输入动态执行SQL。 这时候应该尽量使用参数化SQL。 这样不仅可以避免SQL注入漏洞攻击,最重要的是数据库会对这些参数化的SQL进行预编译,使得最先执行的SQL有时DBMS会对这条SQL语句进行查询优化并进行预编译,这样预编译后的结果后面执行这条SQL的时候会直接使用,可以大大提高执行速度。

4、尝试将多条SQL语句压缩成一条SQL语句

每次执行SQL,都需要建立网络连接,进行权限验证,对SQL语句进行查询优化,发送执行结果。 这个过程是非常耗时的,所以应该尽量避免执行过多的SQL语句,可以压缩到不要使用多条语句来执行一个SQL语句。

5.用where子句替换句子

避免使用子句,因为结果集只有在检索到所有记录后才被过滤,而where是在聚合之前选择记录。 如果可以通过 where 子句限制记录数,则可以减少这种开销。 中的条件一般用于聚合函数的过滤。 否则,条件应该写在where子句中。

6.使用表别名

在SQL语句中连接多个表时,使用表别名并在每个列名前加上别名。这样可以减少解析时间并减少

列名歧义导致的语法错误更少。

7. 将 union 替换为 union all

当SQL语句需要对两个查询结果集进行union时,即使检索结果中没有重复记录,如果使用union,两个结果集也会尝试合并,然后排序,然后输出最终结果,所以如果你可以判断搜索结果中没有重复记录时,应该使用union all,这样效率会提高。

8.考虑使用“临时表”临时存储中间结果

简化 SQL 语句的一个重要方法是使用临时表来临时存储中间结果。 然而,临时表的好处远不止这些。 临时结果临时存放在临时表中,后面的查询在中间,可以避免程序中多次扫描主表,也大大减少了程序执行时的“共享锁”阻塞“更新锁”,减少阻塞,提高并发性表现。

但是也要避免频繁的创建和删除临时表,以减少系统表资源的消耗。

九。 仅在必要时使用事务开始

SQL中一条SQL语句默认是一个事务,也是语句执行后默认的。 其实这是begin tran的一种最小化形式,就像每句开头隐含一个begin tran,句末隐含一个begin tran。

在某些情况下,我们需要显式声明 begin tran。 例如,在执行“插入、删除、修改”操作时,需要同时修改几个表。 begin tran可以起到这样的作用,它可以把几条SQL语句设置在一起执行,最后一起执行。 好处是保证了数据的一致性,但没有什么是完美的。 Begin tran付出的代价是,所有被SQL语句锁定的资源在前无法释放。

可见,如果被Begin tran困住的SQL语句过多,数据库的性能就会很差。 在大事务提交之前,其他的语句必然会被阻塞,从而产生大量的块。

Begin tran使用的原理是在保证数据一致性的前提下,begin tran困住的SQL语句越少越好! 在某些情况下,触发器可以用来同步数据,begin tran不是必须的。

十。 尽量避免使用游标

尽量避免向客户端返回大量数据。 如果数据量太大,就要考虑对应的需求是否合理。 因为游标的效率很差,如果游标操作的数据超过10000行,那么就要考虑重写了。

11. 使用 / 代替 char/nchar

更多编程相关知识,请访问:编程入门! !

以上就是数据库SQL调优的几种方式的详细内容。 更多内容请关注php中文网其他相关文章!

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON