查询优化之单表查询

这篇具有很好参考价值的文章主要介绍了查询优化之单表查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

建表

CREATE TABLE IF NOT EXISTS `article` (
`id` INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
`author_id` INT(10) UNSIGNED NOT NULL,
`category_id` INT(10) UNSIGNED NOT NULL,
`views` INT(10) UNSIGNED NOT NULL,
`comments` INT(10) UNSIGNED NOT NULL,
`title` VARBINARY(255) NOT NULL,
`content` TEXT NOT NULL
);
 
INSERT INTO `article`(`author_id`, `category_id`, `views`, `comments`, `title`, `content`) VALUES
(1, 1, 1, 1, '1', '1'),
(2, 2, 2, 2, '2', '2'),
(1, 1, 3, 3, '3', '3');
 
SELECT * FROM article;

查询优化之单表查询

例题

  • 查询 category_id 为1 且 comments 大于 1 的情况下,views 最多的 article_id

一般

我们一般会使用以下语句查询

EXPLAIN SELECT id,author_id FROM article WHERE category_id = 1 AND comments > 1 ORDER BY views DESC LIMIT 1;

查询优化之单表查询
这个sql语句的type是all,并且Extra里面出现了Using filesort,这个必须优化

添加索引

CREATE INDEX idx_article_ccv ON article(category_id,comments,views);

我们再次进行上面语句的查询

EXPLAIN SELECT id,author_id FROM article WHERE category_id = 1 AND comments > 1 ORDER BY views DESC LIMIT 1;

查询优化之单表查询
我们可以看到type变成了range,但是extra里面却是Using filesort ,这个性能有点差

优化索引

BTree 索引的工作原理
  1. 他会先排序category_id
  2. 遇到相同的category_id 在排序comments
  3. 遇到相同的comments 在排序views

在上面语句中comments > 1 是一个范围值(所谓range),range 类型查询字段后面的索引无效,所以MySQL 无法利用索引再对后面的 views 部分进行检索

进行优化
  1. 我们删除索引后进行新建索引
DROP INDEX idx_article_ccv ON article;
  1. 新建索引
CREATE INDEX idx_article_cv ON article(category_id,views);
  1. 执行slq语句
EXPLAIN SELECT id,author_id FROM article WHERE category_id = 1 AND comments > 1 ORDER BY views DESC LIMIT 1;

查询优化之单表查询
我们发现type变成了ref,也没有存在Using filesort了文章来源地址https://www.toymoban.com/news/detail-430166.html

到了这里,关于查询优化之单表查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unable to create ‘.../.git/index.lock‘: File exists.(git报错)

    (1)具体报错信息 无法进行提交代码与切换分支,vscode卡死 (2)解决方法找到项目git下对应的index.lock手动删除 (3)具体原因index.lock         在进行某些比较费时的git操作时自动生成,操作结束后自动删除,相当于一个锁定文件,目的在于防止对一个目录同时进行多个

    2024年02月02日
    浏览(92)
  • R语言【base】——dir.exists()和dir.create()目录和文件权限的操作

    Package  base  version 4.3.2 参数【path】 :是一个字符向量,包含一个路径名。 参数【paths】 :字符向量,其中包含文件或目录路径。 参数【showWarnings】 :逻辑值。是否应显示失败警告? 参数【recursive】 :逻辑值。是否应该创建路径中除最后一个元素之外的其他元素?如果为

    2024年02月04日
    浏览(39)
  • git-Unable to create ‘.../.git/index.lock‘: File exists.(git报错)

    (1)具体报错信息 无法进行提交代码与切换分支,vscode卡死 (2)解决方法找到项目git下对应的index.lock手动删除 (3)具体原因index.lock         在进行某些比较费时的git操作时自动生成,操作结束后自动删除,相当于一个锁定文件,目的在于防止对一个目录同时进行多个

    2024年02月19日
    浏览(45)
  • [已解决]ln: failed to create symbolic link ‘/usr/bin/python’: File exists

    安装python3 在添加软链时报错如下(翻译过来的意思就是:创建符号链接失败,文件存在。) 解决办法1,加个f参数覆盖之前存在的文件 把  -s  命令修改成  -sf  命令; -f  命令的意思是强制执行,也就意味着如果不存在就执行创建,存在就执行覆盖掉  解决办法2,先 删除

    2024年02月15日
    浏览(44)
  • 【git学习】解决git提交代码时报错: Unable to create ‘XXX/.git/index.lock‘: File exists.

    使用git提交代码的时候,出现了 Unable to create \\\'.git/index.lock\\\' File exists 问题,如下所示: Git 执行操作时会自动生成 index.lock 文件,操作结束后会自动删除。这样做的目的是避免同时操作同一个文件夹。 错误提示我们: 因此,我们删除该目录下的 .git/index.lock 文件即可 删除之后

    2024年02月11日
    浏览(49)
  • MySQL查询练习-单表查询

    查询出部门编号为30的所有员工: 所有销售员的姓名、编号和部门编号: 找出奖金高于工资的员工: 找出奖金高于工资60%的员工: 找出部门编号为10中所有经理,和部门编号为30中所有销售员的详细资料: 找出部门编号为10中所有经理,部门编号为30中所有销售员,还有即不

    2024年02月13日
    浏览(46)
  • git问题解决:git add . 时,fatal: Unable to create ‘xxx/.git/index.lock‘: File exists.

    造成的原因是在某些比较费时的git操作时自动生成 index.lock文件,操作结束后自动删除,相当于一个锁定文件,目的在于防止对一个目录同时进行多个操作。  有时强制关闭进行中的git操作,这个文件没有被自动删除,之后你就无法进行其他操作,必须手动删除,进入.git文件

    2024年02月08日
    浏览(61)
  • docker 启动容器异常Error response from daemon: OCI runtime create failed: container with id exists

    问题描述 docker服务异常停止,重启docker后,容器启动失败 错误信息 Error response from daemon: OCI runtime create failed: container with id exists: xxx unknown 错误原因 docker启动的时候,会在运行目录(/var/run/docker/runtime-runc/moby)(不同环境,可能目录不一样,可以通过 find / -name \\\'容器ID\\\' 查找

    2024年02月16日
    浏览(35)
  • SQL 相关子查询 和 不相关子查询、Exists 、Not Exists、 多表连接(包含自连接)

    不相关子查询 子查询的查询条件不依赖于父查询,称不相关子查询。子查询可以单独运行的 相关子查询 ==== 关联子查询 子查询的查询条件依赖于父查询,称为 相关子查询。子查询不能单独运行的 子查询 也称 内部查询 父查询 也称 外部查询 如果子查询的执行依赖于外部查

    2024年02月14日
    浏览(39)
  • 数据库的简单查询——单表查询

    本篇文章主要是数据库的一些简单查询,包括条件查询,模糊查询,分组查询等 准备工作:三张数据表                学生表(student):                            课程表(course):          学生选课表(sc):     (1)查询学生表中全体学生的所有信息。 SQL语句:

    2023年04月11日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包