Extra:
1.use index
从只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。当查询只使用作为单一索引一部分的列时, 可以使用该策略。
rows:
rows
列显示MySQL
认为它执行查询时必须检查的行数。就是实际会去硬盘查找的行数,与在索引中查找有区别。
select_type:
1.
SIMPLE
简单SELECT
(
不使用UNION
或子查询)
2.
PRIMARY
最外面的SELECT,最上层select,子查询外面得
3.UNION
UNION
中的第二个或后面的SELECT
语句
4.DEPENDENT UNION
UNION
中的第二个或后面的SELECT
语句,取决于外面的查询
o
UNION RESULT
UNION
的结果。
o
SUBQUERY
子查询中的第一个SELECT
o
DEPENDENT SUBQUERY
子查询中的第一个SELECT
,取决于外面的查询
o
DERIVED
导出表的SELECT
(
FROM
子句的子查询)
table:
输出的行所引用的表。
type:
联接类型。下面给出各种联接类型,按照从最佳类型到最坏类型进行排序
:
1.
system
表仅有一行(=
系统表)
。这是const
联接类型的一个特例。
2.
const
表最多有一个匹配行,它将在查询开始时被读取。因为仅有一行,在这行的列值可被优化器剩余部分认为是常数。const
表很快,因为它们只读取一次!
const
用于用常数值比较PRIMARY
KEY
或UNIQUE
索引的所有部分时。在下面的查询中,tbl_name
可以用于const
表:
3.ref
对于每个来自于前面的表的行组合,所有有匹配索引值
的行将从这张表中读取。如果联接只使用键的最左边的前缀,或如果键不是UNIQUE
或PRIMARY
KEY
(换句话说,如果联接不能基于关键字选择单个行的话),则使用ref
。如果使用的键仅仅匹配少量行,该联接类型是不错的。
ref
可以用于使用=
或<=>
操作符的带索引的列。
3.ALL
对于每个来自于先前的表的行组合,进行完整的表扫描。如果表是第一个没标记const
的表,这通常不好,并且通常在它情况下很
差。通常可以增加更多的索引而不要使用ALL
,使得行能基于前面的表中的常数值或列值被检索出。
联接采用扫描所有行的形式。
possible_keys:
possible_keys
列指出
mysql能使用哪个索引
在该表中找到行。注意,该列完全独立于EXPLAIN
输出所示的表的次序。这意味着在possible_keys
中的某些键实际上不能按生成的表次序使用。
如果该列是NULL
,则没有相关的索引。在这种情况下,可以通过检查WHERE
子句看是否它引用某些列或适合索引的列来提高你的查询性能。如果是这样,创造一个适当的索引并且再次用EXPLAIN
检查查询。
key:
key
列显示mysql
实际决定使用的键
(索引)。如果没有选择索引,键是NULL
。要想强制MySQL
使用或忽视possible_keys
列中的索引,在查询中使用FORCE
INDEX
、USE
INDEX
或者IGNORE
INDEX
。
分享到:
相关推荐
文档首先通过一个简单的SQL查询语句来说明EXPLAIN命令输出的各部分参数意义,然后进一步分析了一个涉及两个表连接的SQL语句的执行计划,探讨了查询优化器在没有WHERE条件限制时的全表扫描行为以及在有连接操作时的...
除了使用EXPLAIN进行SQL查询的优化之外,合理配置MySQL的参数也是提高性能的重要手段。 - **innodb_buffer_pool_size**:InnoDB缓冲池的大小,通常应设为服务器总内存的75%左右。 - **innodb_log_file_size**:...
Explain各参数的含义如下: 列名 说明 id 执行编号,标识select所属的行。如果在语句中没有子查询或关联查询,只有唯一的select,每行都将显示1.否则,内层的select语句一般会顺序编号,对应于其在原始语句中...
这种语法可以让你在复杂的查询中重用子查询结果,提高代码的可读性和可维护性。然而,它是否将数据存储在内存中取决于Hive的优化设置。 `hive.optimize.cte.materialize.threshold`是一个关键的Hive配置参数,用来...
`EXPLAIN`输出的各个字段有特定含义: - `id`:查询识别符,用于区分不同的SELECT子句。 - `select_type`:查询类型,如SIMPLE(无子查询或连接)、PRIMARY(主查询)、SUBQUERY(子查询)等,不同类型对应不同的...
12. **无意义查询的避免**:不要执行无结果的查询,如SELECT INTO空表结构,直接使用CREATE TABLE语句创建。 13. **EXISTS替代IN**:在某些情况下,使用EXISTS比IN更高效,尤其是在子查询返回少量数据时。 14. **...
12. **避免无意义的查询**:不要创建不会返回结果的查询,如`SELECT ... INTO`,而是直接使用`CREATE TABLE`。 13. **使用EXISTS替代IN**:在适当情况下,`EXISTS`通常比`IN`更高效,特别是在子查询返回少量数据时...
Oracle数据库中的物化视图(Materialized View,简称MV)是一种强大的优化工具,它通过预先计算并存储查询结果,提供了一种快速访问复杂查询数据的方式。这种技术在数据仓库环境中尤其有用,因为数据仓库通常涉及...
`EXPLAIN`的结果会显示关于查询如何执行的详细信息,包括id、select_type、table、type、possible_keys、key、key_len、ref、rows和Extra等字段。每个字段都有特定含义: - `id`:查询的序列号,用于区分嵌套查询。...
使用LIMIT或TOP限制结果集大小,尤其是在进行分页查询时。 8. **合理使用子查询**: 子查询可能导致性能下降,考虑使用JOIN或临时表替代。 9. **考虑数据分布**: 了解数据的分布情况可以帮助编写更有效的查询...
3. 使用参数化查询:为了防止SQL注入攻击,应使用参数化查询。这种方式可以将用户输入的数据与SQL语句分开,确保数据安全。 4. 正确使用JOIN操作:在联接(JOIN)操作中,理解各种JOIN类型(如INNER JOIN, LEFT ...
- **优化建议**:如果可能,将常用查询结果缓存在应用层或数据库层,减少重复查询。 - **示例**:使用Redis或Memcached等缓存系统来缓存频繁访问的数据。 #### 二十一、索引准则 - **优化建议**:根据查询频率和...
- 存储过程可以接受参数,并且能够返回结果集,而视图则不能。 #### 五、多表查询与子查询 - **多表查询**: - 内连接(INNER JOIN):只返回两个表中匹配的记录。 - 外连接(LEFT JOIN、RIGHT JOIN):返回一...
EXPLAIN关键字可以揭示查询的id、select_type、table、type、possible_keys、key、key_len等信息,从而帮助开发者深入分析并提升查询性能。 type字段非常关键,它展示了表的连接类型,不同的连接类型对应的性能也...
15. **数据库设计和查询优化**:合理的设计数据库表结构,以及有效的查询策略,如预估查询结果大小,避免全表扫描,都是性能优化的重要方面。 16. **使用覆盖索引**:当查询只需要索引中的字段,而不需回表获取其他...
3. **查询计划分析**:学习使用EXPLAIN命令来分析SQL查询执行计划,帮助识别潜在的性能瓶颈,如全表扫描、没有使用索引等。通过调整查询结构和添加索引来改进执行计划。 4. **连接(JOIN)优化**:多表查询时,JOIN...
- 使用 EXPLAIN PLAN 来查看和分析执行计划,确保查询按照预期的方式进行。 #### 二、优化 WHERE 子句中的条件顺序 在 WHERE 子句中,条件的顺序同样会影响查询效率。Oracle 在评估 WHERE 子句时是从左到右依次...
7. **视图**:视图是虚拟表,基于一个或多个表的查询结果。视图可以简化复杂的查询,提供安全访问权限,以及隐藏底层表结构。 8. **触发器**:触发器是在特定事件(如INSERT、UPDATE、DELETE)发生时自动执行的存储...
- 了解EXPLAIN输出的各种字段含义,以便更好地解读执行计划。 3. **扩展的EXPLAIN输出格式** - EXPLAIN EXTENDED提供更多的细节,有助于深入了解查询优化器的工作方式。 4. **获取指定连接的执行计划信息** - ...