当前位置:首页 » 编程语言 » sql语句or的优化

sql语句or的优化

发布时间: 2023-01-22 09:52:19

1. sql优化问题 用到了or,怎么对or进行优化

看具体的代码,是怎么个OR法。
1、不同的逻辑组合 -- 改为UNION,使查询时各自采用恰当的Index
2、多个代码匹配组合 -->改为IN(。。。)

2. 如何进行SQL性能优化

这里分享下mysql优化的几种方法。

1、首先在打开的软件中,需要分别为每一个表创建 InnoDB FILE的文件。

3. sql or 语句优化问题

试试这个:

SELECT * FROM get_childs1('1')
WHERE addorgid=childid
OR receiveorgid=childid
OR sendorgid=childid
OR adddeptid =childid
OR senddeptid =childid
OR receivedeptid=childid

改成:
SELECT * FROM get_childs1('1')
WHERE childid in(addorgid,receiveorgid,sendorgid,adddeptid,senddeptid,receivedeptid)

4. 请问SQL语句优化的策略都有哪些


创建表的时候。应尽量建立主键,根据主键查询数据;

大数据表删除,用truncate
table代替delete。

合理使用索引,在OLTP应用中一张表的索引不要太多。组合索引的列顺序尽量与查询条件列顺序保持一致;对于数据操作频繁的表,索引需要定期重建,以减少失效的索引和碎片。

查询尽量用确定的列名,少用*号。
尽量少嵌套子查询,这种查询会消耗大量的CPU资源;对于有比较多
or运算的查询,建议分成多个查询,用union
all联结起来;多表查询
的查询语句中,选择最有效率的表名顺序(基于规则的优化器中有效)。Oracle解析器对表解析从右到左,所以记录少的表放在右边。

尽量多用commit语句提交事务,可以及时释放资源、解
锁、释放日志空间、减少管理花费;在频繁的、性能要求比较高的
数据操作中,尽量避免远程访问,如数据库链等,访问频繁的表可以常驻内存:alter
table...cache;

5. 如何优化带or条件的sql

可以把or条件换成 union,union 比or 本身要快很多。
另外根据需要增加条件列上的索引。
注意 union all 和union 的区别

6. sql优化的N种方法

1.SQL语句中IN包含的值不应过多:
例如:select id from t where num in(1,2,3) 对于连续的数值,能用between就不要用in了; 实测速度差距不是很大.

2.SELECT语句务必指明字段名称:
禁止用 * 来查询 ,禁止用 * 来查询 ,禁止用 * 来查询 , 查找哪个字段,就写具体的字段.

select * from user_test WHERE address=15988;
select address from user_test WHERE address=15988;

3.只查询一条数据的时候,使用limit 1
【这个很有用】

4.避免在where子句中对字段进行null值判断:
【实测:null值的判断依然走了索引】
explain select uid from user_test WHERE phone is null;

5.避免在where子句中对字段进行表达式操作:

6.对于联合索引来说,要遵守最左前缀法则:
例如组合索引(id,name,sex) 使用的时候,可以id 或者id,name . 禁止直接name,或者sex.会导致联合索引失败

注意: id, name,sex 这三个字段填写顺序不会有影响, mysql会自动优化成最左匹配的顺序.

前三条sql都能命中索引,中间两条由于不符合最左匹配原则,索引失效.

最后一条sql 由于有最左索引id 所以索引部分成功,部分失效. id字段索引使用成功.

7.尽量使用inner join,避免left join:
如果连接方式是inner join,在没有其他过滤条件的情况下MySQL会自动选择小表作为驱动表,但是left join在驱动表的选择上遵循的是左边驱动右边的原则,即left join左边的表名为驱动表。
【实测:不是很准确,具体用explain测试】

8.注意范围查询语句:
对于联合索引来说,如果存在范围查询,比如between、>、<等条件时,会造成后面的索引字段失效。

解决办法: 业务允许的情况下,使用 >= 或者<= 这样不影响索引的使用.

explain select * from user_test where uid=10 and name='张三' and phone='13527748096';
explain select * from user_test where uid between( 1 and 10) and name ='张三' and phone='13527748096';

9.不建议使用%前缀模糊查询:
例如 : LIKE“%name”或者LIKE“%name%”,这种查询会导致索引失效而进行全表扫描。但是可以使用LIKE “name%”。

explain select * from user_test where uid=10 and uid like "%1" ;
explain select * from user_test where uid=10 and uid like "1%" ;

10.在 where 子句中使用 or 来连接条件,如果or连接的条件有一方没有索引,将导致引擎放弃使用索引而进行全表扫描
解决办法: 将or连接的双方都建立索引,就可以使用.

explain select * from user_test where uid=10 or name='张三';

11.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。(此处存在疑点,我本人测试的时候,发现索引还是能使用到)

12.字符串类型的字段 查询的时候如果不加引号'' ,会导致自动进行隐式转换,然后索引失效

7. 如何优化带or条件的sql

可以把or条件换成 union,union 比or 本身要快很多。 另外根据需要增加条件列上的索引。 注意 union all 和union 的区别

8. SQL语句的几种优化方法

1、尽可能建立索引,包括条件列,连接列,外键列等。

2、尽可能让where中的列顺序与复合索引的列顺序一致。

3、尽可能不要select *,而只列出自己需要的字段列表。

4、尽可能减少子查询的层数。

5、尽可能在子查询中进行数据筛选 。

9. sql语句优化

1.查看链接查询部分是不是键和索引
2.检查d.area_id是不是有索引
3.检查a.alloc_date是不是有索引
4.将Or链接的条件改成union all的方式来查询
5.(可能是关键)to_char(a.alloc_date,'yyyymm')>='200805' 这个函数方式的,改为直接方式的a.alloc_date >= date'2008-05-01' 避免全表扫描
6.(也可能是关键)检查类型一致性,area_id in d.area_id in (17000124,17000125,17000126,17000127) 这个就要求area_id 一定是数值的,否则很大几率对area_id做转换函数从而全表扫描的。如果是字符串的in后面的每一项就应该加上单引号。
7.经in语法改成or语法
8.如果还不行的话,根据表的大小情况做成嵌套查询,以便强制条件的应用顺序,以避免先连接再筛选的情况发生。

以上只是建议,具体的如果我猜的不错的话用的是oracle,那么在PL/SQL里面将查询部分摘出来,执行后按F5就可以看到解释计划窗口了,看看瓶颈在什么地方

10. MySQL百万级数据表or查询优化

目前公司的订单表有100多万条,使用订单号查询数据时,所需时间大多要10-30秒不等,查看了慢查询日志,发现有的订单查询竟然耗时65秒

我查看了原有的查询语句,发现where后面跟了or查询,虽然3个or都索引,使用explain分析查询结果,发现要扫描近70万行,几乎是全盘扫描一遍,只为获取最多3条数据,效率实在是低下
这3个字段均设置了索引,但or在这个语句中,使索引失效了(主要看最后几行)

使用union all代替or查询,也就是说把3个字段的查询分别做查询,将结果使用union all连接在一起,这样单次查询可以用到索引,效率大大提高
先看一下分析结果

简要的sql语句,查询结果不超80ms

热点内容
php办公系统 发布:2025-07-19 03:06:35 浏览:900
奥德赛买什么配置出去改装 发布:2025-07-19 02:53:18 浏览:42
请与网络管理员联系请求访问权限 发布:2025-07-19 02:37:34 浏览:189
ipad上b站缓存视频怎么下载 发布:2025-07-19 02:32:17 浏览:844
phpcgi与phpfpm 发布:2025-07-19 02:05:19 浏览:527
捷达方向机安全登录密码是多少 发布:2025-07-19 00:57:37 浏览:693
夜魔迅雷下载ftp 发布:2025-07-19 00:39:29 浏览:99
增值税票安全接入服务器地址 发布:2025-07-19 00:20:45 浏览:486
solidworkspcb服务器地址 发布:2025-07-18 22:50:35 浏览:823
怎么在堆叠交换机里配置vlan 发布:2025-07-18 22:42:35 浏览:630