我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MYSQL避免全表扫描

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码


	MYSQL避免全表扫描


	MYSQL避免全表扫描
[数据库教程]

MYSQL避免全表扫描

对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引

应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描

如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0

应尽量避免在 where 子句中使用!=或操作符,否则引擎将放弃使用索引而进行全表扫描。

应尽量避免在 where 子句中使用or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,(可以使用union)

in 和 not in 也要慎用,否则会导致全表扫描(能用 between 就不要用 in)

下面的查询也将导致全表扫描。

select id from t where name like ‘%李%‘,select id from t where name like ‘%李‘

若要提高效率,可以使用此格式select id from t where name like ‘李%‘,也可以考虑全文检索。

避免在索引列上使用计算,也就是说,应尽量避免在 where 子句中对字段进行表达式操作和函数操作,这将导致引擎放弃使用索引而进行全表扫描。

如:select id from t where num/2=100应改为:select id from t where num=100*2

很多时候用 exists 代替 in 是一个好的选择:exists用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值true或false。

select num from a where num in(select num from b)

用下面的语句替换:select num from a where exists (select 1 from b where num=a.num)

任何地方都不要使用 select from t ,用具体的字段列表代替“”,不要返回用不到的任何字段。

用>=替代>

高效: SELECT * FROM EMP WHERE DEPTNO >=4

低效: SELECT * FROM EMP WHERE DEPTNO >3

两者的区别在于, 前者DBMS将直接跳到第一个DEPT等于4的记录,而后者将首先定位到DEPTNO=3的记录并且向前扫描到第一个DEPT大于3的记录。

用Where子句替换having子句

MYSQL避免全表扫描

原文地址:https://www.cnblogs.com/duyuan/p/13605698.html

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MYSQL避免全表扫描

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MYSQL避免全表扫描

MYSQL避免全表扫描1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描如:select id f

	MYSQL避免全表扫描
2018-12-03

oracle怎么避免全表扫描

创建索引:通过在查询条件中使用索引字段,可以帮助Oracle优化查询计划,避免全表扫描。编写高效的SQL语句:避免使用通配符查询,尽量使用具体的条件来限制数据范围,减少全表扫描的可能性。使用分区表:将表按照某个字段进行分区,可以在查询时只扫
oracle怎么避免全表扫描
2024-04-09

导致MySQL做全表扫描的几种情况

这两天看到了两种可能会导致全表扫描的sql,这里给大家看一下,希望可以避免踩坑: 情况1: 强制类型转换的情况下,不会使用索引,会走全表扫描。 举例如下: 首先我们创建一个表 CREATE TABLE `test` ( `id
2022-05-28

sql全表查询避免

1. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,select id from a where a is null;2. 应尽量避免在 where 子句中使用!=或操作符,否则将引擎放弃使用索引而进行
sql全表查询避免
2016-03-19

mysql怎么避免回表

要避免回表的情况,可以考虑以下几个方面:使用合适的索引:在关键列上创建索引,这样查询可以直接从索引中获取数据,而不需要回表查询。使用覆盖索引:在查询中只使用索引列,而不使用其他列,这样可以避免回表查询。使用联合索引:将多个列组合成一个索引,
mysql怎么避免回表
2023-10-28

Win10如何设置Windows Defender计划扫描避免与操作发生冲突

Win10自带杀毒软件Windows Defender,默认每天进行计划扫描。这本来是件好事,但是想到扫描时如果赶上电脑高速操作,那两者不可避免会发生冲突。其实,我们可以设置Windows Defender的计划扫描,如何设置呢?打开&ld
2023-06-10

【MySQL】说透锁机制(三)行锁升表锁如何避免? 锁表了如何排查?

文章目录 前言哪些场景会造成行锁升表锁?如何避免?如何分析排查?查看`InnoDB_row_lock%`相关变量查看 `INFORMATION_SCHEMA`系统库 总结最后 前言 在上文我们曾小小的提到过,在索引失效的情
2023-08-18

编程热搜

目录