首页 生活指南 正文内容

查询条件有没有加索引?一语惊醒梦中人索引怎么办?梦中人

阿立指南 生活指南 2022-09-12 15:09:44 390 0

oracle优化培训_直线搜索方法,无约束优化方法,约束优化方法_oracle数据库优化方法

当我第一次开始从事一个项目时,我几乎没有开发经验。每次遇到查询慢的时候,项目经理都会问:你又用*了吗?查询条件是否被索引?一句话叫醒做梦人,快点查..果然不出所料!

有时候我们在写SQL语句的时候,根本不考虑它的性能,或者根本没有优化的感觉。虽然可以暂时满足基本功能,但当数据量大时,后果可想而知。

说说sql优化的一些常用方法:

1)尽量不要使用表中的*。除非您需要返回数据库表的所有字段,否则不要返回任何未使用的字段。因为*会引起全表扫描,所以效率比较低。

2)where子句和order by中涉及的列应该尽量索引,但不是所有的都需要索引,具体看业务情况。对于多个where子句中使用的列,建议建索引。索引并不是越多越好,虽然索引可以提高相应的效率,但也降低了效率。

3)尽量避免在where子句中使用!=或运算符,否则引擎会放弃使用索引而执行全表扫描。对于不等于这个的情况,可以考虑改成范围查询方案。

4)尽量避免在 where 子句中使用或加入条件。如果一个字段有索引,而一个字段没有索引,引擎会放弃使用索引,进行全表扫描oracle数据库优化方法,如:

id from where age=10 or name= '张三';

你可以这样查询:

年龄 = 10 的 ID

联合所有

id from where name= '张三'

5)在where子句中尽量避免对字段进行空值判断,因为空值判断会导致全表扫描而不是索引扫描。对于空判断的情况,考虑为该列创建一个数据库默认值。例如:

oracle优化培训_oracle数据库优化方法_直线搜索方法,无约束优化方法,约束优化方法

6)in 和 not in 也要谨慎使用,否则会导致全表扫描,如:

id from where age in(1,2,3)

对于连续值,尽量不要使用 in:

1 岁和 3 岁的身份证

使用它来代替 in 通常是一个不错的选择:

age from a where age in(age from b)

替换为以下语句:

年龄从哪里(年龄从b哪里b.age=a.age);

7)尽量避免左右模糊查询,这样会导致索引失败,然后查询全表,如:id where name like '%abc%',可以用右边模糊查询,可以按索引搜索,如:id where name like 'abc%';

8)如果在where子句中使用参数或者对字段进行表达式操作,也会造成全表扫描,如:

年龄/2 = 10

应改为:id where age= 10*2;

9)应尽量避免对where子句中的字段进行函数式操作,这会导致引擎放弃使用索引而进行全表扫描。函数、算术运算或其他表达式运算通常会导致全表扫描,在这种情况下可以考虑将数据的冗余部分放入表中。

10)使用索引字段作为条件时,如果索引是复合索引,那么必须以索引中的第一个字段作为条件,保证系统可以使用索引,否则索引将不会被使用,并且应该尽量保持字段顺序与索引顺序一致。

11)语句,如果只更改1、2个字段,而不是所有字段,否则频繁调用会造成很大的性能消耗并带来大量日志。

12)对于数据量大的多JOIN表(这里几百算大),必须先分页再JOIN,否则逻辑读会很高oracle数据库优化方法,性能很差。

13) 来自表的计数(*);这样的无条件计数会导致全表扫描,没有业务意义,必须避免。可以改成count(id) from table。

14)尽可能使用数字字段。如果字段仅包含数字信息,请尽量不要将它们设计为字符字段。这将降低查询和连接性能并增加存储开销。

15)尽量用char代替char,因为首先变长字段的存储空间小,可以节省存储空间。其次,对于查询而言,在相对较小的领域内搜索效率明显更高。

oracle优化培训_oracle数据库优化方法_直线搜索方法,无约束优化方法,约束优化方法

陪伴是最长的告白

为你每日推送Java技术干货

识别二维码→

关注→

oracle优化培训_直线搜索方法,无约束优化方法,约束优化方法_oracle数据库优化方法

命运,也许在“好看”

oracle优化培训_直线搜索方法,无约束优化方法,约束优化方法_oracle数据库优化方法

欢迎 发表评论:

文章目录
    搜索