AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 130429
Accepted
dr_
dr_
Asked: 2016-02-26 02:50:26 +0800 CST2016-02-26 02:50:26 +0800 CST 2016-02-26 02:50:26 +0800 CST

SELECT 查询类型和优化

  • 772

我正在使用一个数据库监控系统,除其他数据外,它还显示了 SELECT 查询的以下值:

  1. 在第一个表上使用范围的联接数
  2. 对第一个表进行全面扫描的连接数
  3. 没有键的连接数,在每行之后检查键的使用情况
  4. 由于不使用索引而执行表扫描的连接数
  5. 在引用表上使用范围搜索的联接数

在这些查询中,哪些查询性能最差,因此应该首先优化?我会按重要性顺序说#2 和#4,但我也想听听对其他类型的评论。

该监控系统还将 SELECT 查询的总数显示为这五个值的总和。对于 SELECT,这些真的都是可能的、互斥的情况吗?

我不是在谈论特定的查询(我可以在慢查询日志中找到);我对上面列出的这 5 个中的查询类型更感兴趣。例如,全表扫描通常是一件坏事(除非我们正在处理小表,在这种情况下我们不会关心优化)。

我的另一个问题是这些类型是否可能重叠,因为监控系统显示的第 6 个值是这五个值的总和,如果这些类型不相互排斥(正如我们怀疑的那样),这就没有意义。

mysql optimization
  • 1 1 个回答
  • 125 Views

1 个回答

  • Voted
  1. Best Answer
    Rick James
    2016-03-04T10:38:20+08:002016-03-04T10:38:20+08:00

    以上都不是。

    如果表只有 10 行,则“完全扫描”是无关紧要的。同上“不使用索引”。

    有许多查询没有索引是有用的;您的统计数据会让您绊倒它们。例如,如果您索引一个“标志”(是/否、M/F 等),优化器通常会避开索引并简单地扫描表——因为这样做效率更高。

    “第一张桌子”。除非您正在查看EXPLAIN,否则很难预测将“首先”查看哪个表。即使 的存在LEFT也不能最终预测表的排序。

    无论如何,你的目标是什么?在我看来,主要目标是找到并修复使系统陷入困境的查询。为此,我想要一个查询列表,按总经过时间(出现次数乘以平均时间)排序。一个非常有效地提供的

    long_query_time = 1
    turn on slowlog
    wait a day
    use one of these to get the list:
        mysqldumpslow -s t
        pt-query-digest
    

    然后,我得到EXPLAIN并SHOW CREATE TABLE处理前几个查询并处理它们。

    如果你想看到“随时间变化”,那么记录最差查询的“总时间”,看看下个月这些查询会变得更好还是更糟。

    您可能会发现一些最糟糕的查询不是SELECTs.

    • 4

相关问题

  • 是否有任何 MySQL 基准测试工具?[关闭]

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve