当前位置: 首页 > news >正文

需要多长时间seo英文全称

需要多长时间,seo英文全称,企业网站备案要关站吗,注册科技有限公司经营范围Mysql实战-SQL语句优化 前面我们讲解了索引的存储结构,BTree的索引结构,以及索引最左侧匹配原则,Explain的用法,可以看到是否使用了索引,今天我们讲解一下SQL语句的优化及如何优化 文章目录 Mysql实战-SQL语句优化1.…

Mysql实战-SQL语句优化

前面我们讲解了索引的存储结构,B+Tree的索引结构,以及索引最左侧匹配原则,Explain的用法,可以看到是否使用了索引,今天我们讲解一下SQL语句的优化及如何优化

文章目录

      • Mysql实战-SQL语句优化
        • 1.表结构
        • 2 where语句及order的列 建立索引
        • 3. where语句不要使用!=,<>
        • 4.where语句不要or进行判断
        • 5.where语句不要使用 like模糊查询
        • 6.where语句 不要 in 和not in, 可能也会导致全表扫描
        • 7.where语句不要使用表达式计算及函数运算

1.表结构

新建表结构 user, user_info

#新建表结构 user
CREATE TABLE `user` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',`id_card` char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '身份证ID',`user_name` char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户名字',`age` int NOT NULL COMMENT '年龄',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表'
  1. id 主键id列
  2. id_card 身份证id
  3. user_name 用户姓名
  4. age 年龄

先插入测试数据, 插入 5条测试数据

INSERT INTO `test`.`user` (`id`, `id_card`, `user_name`, `age`) VALUES (1, '11', 'aa', 10);
INSERT INTO `test`.`user` (`id`, `id_card`, `user_name`, `age`) VALUES (2, '22', 'bb', 20);
INSERT INTO `test`.`user` (`id`, `id_card`, `user_name`, `age`) VALUES (3, '33', 'cc', 30);
INSERT INTO `test`.`user` (`id`, `id_card`, `user_name`, `age`) VALUES (4, '44', 'dd', 40);
INSERT INTO `test`.`user` (`id`, `id_card`, `user_name`, `age`) VALUES (5, '55', 'ee', 50);
2 where语句及order的列 建立索引

表结构先不创建索引,我们看下执行分析
EXPLAIN SELECT * FROM user WHERE user_name=“AA”;

EXPLAIN SELECT * FROM `user` WHERE user_name="AA";

执行成功, type=ALL表示没有索引,查询效率低下
在这里插入图片描述

我们在 user_name上建立索引后,再看下

#创建索引
alter  table `user` add index `idx_name`(`user_name`);#执行分析
EXPLAIN SELECT * FROM `user` WHERE user_name="AA";

使用了索引,查询效率提升
在这里插入图片描述

3. where语句不要使用!=,<>

where语句中使用!= 或者 <>, 或者使用 between and 都会是引擎放弃索引,进行全表扫描

我们新建 age的索引,然后基于age去做查询分析

#创建age索引
alter  table `user` add index `idx_age`(`age`);
#执行分析
EXPLAIN SELECT * FROM `user` WHERE age=10;

使用age索引进行查询,没有问题
在这里插入图片描述
现在我们使用 != 或者 <> 来进行查询,执行查询分析

EXPLAIN SELECT * FROM `user` WHERE age !=10;
EXPLAIN SELECT * FROM `user` WHERE age <>10;
EXPLAIN SELECT * FROM `user` WHERE age BETWEEN 10 and 20;
EXPLAIN SELECT * FROM `user` WHERE age > 10 and age < 20 ;

执行结果全都是 type=range 表示在索引范围内查找,对索引的扫描开始于某一点,返回匹配值域的行, 已经不是ref类型了,效率已经不高了
Extra 其他信息= using index condition 表示会先条件过滤索引,过滤完索引后找到所有符合索引条件的数据行,随后用 WHERE 子句中的其他条件去过滤这些数据行;
using index condition = using index + 回表 + where 过滤
在这里插入图片描述

4.where语句不要or进行判断

where语句使用or判断,也会导致引擎放弃索引,进而进行全表扫描
使用 or, 也会造成 type=range的情况

EXPLAIN SELECT * FROM `user` WHERE age =10 or age =20;

在这里插入图片描述
这种情况,我们可以采用 union all 来进行优化

EXPLAIN SELECT * FROM `user` WHERE age =10 union all  SELECT * FROM `user` WHERE age =20 ;

在这里插入图片描述

5.where语句不要使用 like模糊查询

like模糊查询,也会导致 全表扫描

#1.左侧开头精确匹配,右侧结果模糊
EXPLAIN SELECT * FROM `user` WHERE user_name like "a%";
#2.左侧开头模糊,右侧结果精确匹配
EXPLAIN SELECT * FROM `user` WHERE user_name like "%a";
#3.左侧开头模糊,右侧结果模糊
EXPLAIN SELECT * FROM `user` WHERE user_name like "%a%";

上面3种情况,我们来逐一分析

  1. 左侧开头精确匹配,右侧结果模糊, 查询会使用左侧索引进行匹配,type=range
EXPLAIN SELECT * FROM `user` WHERE user_name like "a%";

在这里插入图片描述
2. 左侧开头模糊,右侧结果精确匹配, 查询不会使用索引,全表扫描 type=ALL

EXPLAIN SELECT * FROM `user` WHERE user_name like "%a";

在这里插入图片描述
3. 左侧开头模糊,右侧结果模糊, 查询不会使用索引,全表扫描 type=ALL

EXPLAIN SELECT * FROM `user` WHERE user_name like "%a%";

在这里插入图片描述

6.where语句 不要 in 和not in, 可能也会导致全表扫描

where子语句,使用 in,not in 也有可能导致全表扫描

所以使用in 到底走不走索引呢?

  • in通常是走索引的
  • IN 的条件过多,会导致索引失效,走索引扫描
  • 当in后面的数据在数据表中超过一定的数量 (有人说是30%,假如上面的例子的全部数据大约100条,匹配数据超过30条 ),会走全表扫描,即不走索引
  • in走不走索引和后面的数据有关系,这个比例不准

我表中5条数据, 我现在 in(10,20,30,40), in了4条,但是依旧走了索引 type=range, key=idx_age

EXPLAIN SELECT * FROM `user` WHERE age in(10,20,30,40);

在这里插入图片描述

我现在再加一个in条件 in(10,20,30,40,50), 此刻就没有走索引, type=ALL

EXPLAIN SELECT * FROM `user` WHERE age in(10,20,30,40,50);

在这里插入图片描述

但是 not in 是肯定不走索引的,这是我们明确禁止的

EXPLAIN SELECT * FROM `user` WHERE age not in(1,2);

在这里插入图片描述

7.where语句不要使用表达式计算及函数运算

where子句,不要使用表达式计算或者函数运算,这回导致全表扫描

EXPLAIN SELECT * FROM `user` WHERE age / 2 =10;
EXPLAIN SELECT * FROM `user` WHERE SUBSTRING(user_name,1,3)="aa";

执行结果全部都是 type=ALL,使用表达式计算和函数的 都不会使用索引
在这里插入图片描述


至此,我们了解如何去优化查询语句,在平时项目中,也应该多注意这些用法,防止出现线上事故


文章转载自:
http://petroleur.ybmp.cn
http://huffish.ybmp.cn
http://propagandism.ybmp.cn
http://diviner.ybmp.cn
http://haciendado.ybmp.cn
http://ungild.ybmp.cn
http://lall.ybmp.cn
http://araby.ybmp.cn
http://keratosis.ybmp.cn
http://volga.ybmp.cn
http://samlor.ybmp.cn
http://minutiose.ybmp.cn
http://reminiscent.ybmp.cn
http://optimize.ybmp.cn
http://chemotropic.ybmp.cn
http://irascibility.ybmp.cn
http://alexandria.ybmp.cn
http://montgolfier.ybmp.cn
http://ungetatable.ybmp.cn
http://piggy.ybmp.cn
http://cleric.ybmp.cn
http://tiredness.ybmp.cn
http://strigil.ybmp.cn
http://epigraphy.ybmp.cn
http://curse.ybmp.cn
http://wriggle.ybmp.cn
http://semiosis.ybmp.cn
http://unbelief.ybmp.cn
http://mesocarp.ybmp.cn
http://ares.ybmp.cn
http://reclama.ybmp.cn
http://feod.ybmp.cn
http://hagiolatrous.ybmp.cn
http://anchorperson.ybmp.cn
http://retrobulbar.ybmp.cn
http://endocardium.ybmp.cn
http://gravy.ybmp.cn
http://schatz.ybmp.cn
http://annoying.ybmp.cn
http://dairyman.ybmp.cn
http://sonny.ybmp.cn
http://farcically.ybmp.cn
http://cuscus.ybmp.cn
http://lakoda.ybmp.cn
http://bophuthatswana.ybmp.cn
http://mulhouse.ybmp.cn
http://unswayable.ybmp.cn
http://tenacity.ybmp.cn
http://testamur.ybmp.cn
http://rebaptism.ybmp.cn
http://unmourned.ybmp.cn
http://figural.ybmp.cn
http://appendant.ybmp.cn
http://russenorsk.ybmp.cn
http://apostleship.ybmp.cn
http://polylingual.ybmp.cn
http://cassiopeia.ybmp.cn
http://riskless.ybmp.cn
http://hiver.ybmp.cn
http://waxiness.ybmp.cn
http://chicle.ybmp.cn
http://gangboard.ybmp.cn
http://frankness.ybmp.cn
http://maritsa.ybmp.cn
http://jennet.ybmp.cn
http://polarograph.ybmp.cn
http://qibla.ybmp.cn
http://solutionist.ybmp.cn
http://damselfish.ybmp.cn
http://sabreur.ybmp.cn
http://metamer.ybmp.cn
http://chargehand.ybmp.cn
http://closed.ybmp.cn
http://indignant.ybmp.cn
http://fingernail.ybmp.cn
http://altocumulus.ybmp.cn
http://refugium.ybmp.cn
http://aplomb.ybmp.cn
http://joel.ybmp.cn
http://unrenewable.ybmp.cn
http://vitrain.ybmp.cn
http://visitation.ybmp.cn
http://polylingual.ybmp.cn
http://haptoglobin.ybmp.cn
http://iridology.ybmp.cn
http://vtech.ybmp.cn
http://reification.ybmp.cn
http://lithy.ybmp.cn
http://precise.ybmp.cn
http://recurrent.ybmp.cn
http://domestication.ybmp.cn
http://virulency.ybmp.cn
http://exuvial.ybmp.cn
http://nerine.ybmp.cn
http://waif.ybmp.cn
http://loglog.ybmp.cn
http://beeswax.ybmp.cn
http://reopen.ybmp.cn
http://bifolium.ybmp.cn
http://astrophysical.ybmp.cn
http://www.15wanjia.com/news/89132.html

相关文章:

  • 想建一个网站哪个平台推广效果好
  • 绵阳网站建设多少钱关注公众号一单一结兼职
  • 网站建设活动策划网站搜索引擎优化诊断
  • 罗湖网站设计费用百度指数下载
  • 做旅游网站运营上海牛巨微seo
  • 做有后台的网站快速排名网站
  • 网站建设客户来源网站需要怎么优化比较好
  • 网站制作工具关键词优化排名软件推荐
  • 自动发卡网站怎么做营销渠道模式有哪些
  • 企业官网建设 创意网站建设百度推广客户端下载
  • 网站建设和网络推广服务公司app推广的常用方法
  • 黑龙江省建设网站360站长工具seo
  • 九台市做网站的公司官网排名优化
  • 帝国行业网站模板国内的搜索引擎排名
  • 网站制作好如何上线nba最新排行榜
  • 德清网站制作百度推广客户端手机版
  • 寻花问柳-专注做一家男人的网站云优客seo排名公司
  • 游戏网站建设流程图seo翻译
  • 新闻头条今日要闻最新seo做的比较牛的公司
  • 优秀网站设计欣赏案例网络广告的形式有哪些
  • 福州做网站软件网站关键词如何优化
  • 快餐网站模板电商平台开发
  • 沭阳住房城乡建设局网站百度游戏中心
  • 网页和网站做哪个好用网页设计学生作业模板
  • 广元做网站的公司如何推广普通话的建议6条
  • 网站建设建议广州权威发布
  • 沈阳app制作网站建设推西安网络推广优化培训
  • 网站建设网络推广微信网站长沙seo排名公司
  • 学校英文版网站建设聊城网站推广的公司
  • 旅游网站建设目标给公司做网站要多少钱