首页
学习
活动
专区
圈层
工具
发布

mysql8.0优化案例图文详解(强推)

数据量过大导致的查询效率慢。 经常作为条件查询的列。...批量的重复值,不适合创建索引;比如列 值过少重复的列,适合创建索引;比如、列 1.3 理想的索引特征 尽量能够覆盖常用字段 字段值区分度高 字段长度小(合适的长度,不是越小越好,至少能足够区分每个值...回表查询的过程: 先按已有索引查询到数据,得出此数据的主键值 再按主键值,再次检索出具体的数据,获取其它列的值 查询涉及到的列都为组合索引列时,包括:select、where、order、group等,...避免使用*,以避免回表查询;不常用的查询列或text类型的列,尽量以单独的扩展表存放。 通常列表数据需要的列并不多,查询的时候可以考虑为索引列;通常详细信息时涵盖的列多,可通过主键单独查询。...1.8 查询总结 避免使用*,以避免回表查询。 不常用的查询列或text类型的列,尽量以单独的扩展表存放。 条件避免使用函数。

1.2K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    查询优化器概念:关于优化器组件

    1、查询转换器(Query Transformer) 对于某些语句,查询转换器确定将原始SQL语句重写为具有较低成本的语义等效SQL语句是否更有利。...查询优化器使用磁盘I/O,CPU使用率和内存使用量作为工作单元。 如下图所示,如果统计数据可用,那么估算器使用它们来计算度量值。统计数据提高了措施的准确性。...基数估计出现在执行计划的Rows列中。 优化器根据一组复杂的公式确定每个操作的基数,这些公式同时使用表和列级统计信息或动态统计信息作为输入。...当单表查询中出现一个没有直方图的等式谓词时,优化器使用最简单的公式之一。在本例中,优化器假设一个统一的分布,并通过将表中的总行数除以WHERE子句谓词中使用的列中不同值的数量来计算查询的基数。...s, products p WHERE p.prod_id = s.prod_id GROUP BY prod_category Plan hash value: 4073170114 --

    2K50

    如何编写SQL查询

    GROUP BY: 将具有指定列中公共值的行的聚合(或分组)到一行中。GROUP BY 子句将具有公共值的行的聚合到一行中,因此行数将与唯一值的数量一样多。...对于未在 GROUP BY 中指定的列的值,SELECT 子句中的聚合函数需要按组聚合这些值。 HAVING: 过滤由 GROUP BY 子句生成的行。...因此,它是 GROUP BY 的一部分,不能在查询中指定它而没有前面的 GROUP BY 语句。 SELECT: 定义查询结果输出中显示的列和表达式的列表。...SELECT 子句计算任何表达式,并定义要返回或作为查询结果投影的列的列表。 ORDER BY: 标识用于对结果数据排序的列,以及对它们进行排序的方向(升序或降序)。...FROM 子句: SQL> SELECT 1+2; 1+2 ______ 3 JOIN 关系模型完全是关于规范化数据,即把独立数据放入单独的表中,并在这些表之间定义 关系。

    2.2K10

    查询优化器概念:关于自动调整优化器及自适应查询优化

    2.1.2 自适应查询计划如何工作 自适应计划包含多个预先确定的子计划和优化器统计信息收集器。 子计划是计划的一部分,优化器可以在运行时切换到它作为备选方案。...p.product_id = o.product_id 此语句的自适应查询计划显示了两种可能的计划,一种使用嵌套循环连接,另一种使用散列连接: SELECT * FROM TABLE(DBMS_XPLAN.display_cursor...广播分布 下图描述了department和employees表之间的混合散列连接,查询协调器指导8个并行服务器进程:P5-P8是生产者,而P1-P4是消费者。每个生产者都有自己的消费者。...如果估计值与实际基数存在显着差异,则优化程序会存储正确的估计值以供后续使用。优化器还会创建SQL计划指令,以便其他SQL语句可以从初始执行期间获取的信息中受益。...如果查询连接了在其连接列中具有数据倾斜的两个表,则SQL plan指令可以指示优化器使用动态统计信息来获得准确的基数估计值。 优化器收集查询表达式上的SQL计划指令,而不是语句级别上的SQL计划指令。

    2K10

    MySQL-索引优化篇(1)_安装演示库 & & explain参数

    ]# ls sakila-data.sql sakila.mwb sakila-schema.sql [root@artisan sakila-db]# mysql -uroot -p sql...宽度小意味着I/O 少,效率高 ---- 覆盖索引 定义 覆盖索引: 如果一个索引包含(或覆盖)所有需要查询的字段的值 ,简言之----->只需扫描索列而无须回表查非索引列的字段。...---- 优点 可优化缓存,减少磁盘I/O操作 举个例子: 一个表 15个字段, 索引字段 3个, 我们就查询这3个索引列的值,而不用回表,查询的字段少,可以缓存更多的数据,同时从内存中获取,可以极大的减少磁盘...I/O操作 可以减少随机I/O, 变随机I/O为顺序I/O操作 可以避免对Innodb主键索引的二次查询 可以避免MyISAM表进行系统调用 ---- 无法使用覆盖索引的情况...,例如从一个索引列里选取最小值可以通过单独索引查找完成。

    59320

    SQL命令 GROUP BY

    SQL命令 GROUP BY SELECT子句,它根据一个或多个列对查询的结果行进行分组。 大纲 SELECT ......GROUP BY子句接受查询的结果行,并根据一个或多个数据库列将它们分成单独的组。 当将SELECT与GROUP BY结合使用时,将为GROUP BY字段的每个不同值检索一行。...GROUP BY将NULL(没有指定值)字段作为一个独立的值组。...这样做的好处是将每个字母变体作为一个单独的组返回。 它的性能缺点是不能使用字段的索引。 可以使用管理门户在系统范围内为包含GROUP BY子句的所有查询配置此行为。...因此,‘New York’和‘New York’都作为单独的组返回。*/ %ROWID 指定GROUP BY子句会导致基于游标的嵌入式SQL查询不设置%ROWID变量。

    5.1K30

    StarRocks 4.0:FlatJSON,让 JSON 查询像列存一样高效

    '2024-01-01' AND '2024-12-31'GROUP BY event_type;这条简单的 SQL 为什么这么慢?...(如 INT、STRING、DOUBLE 等);对低频或不固定字段,统一写入一个“冗余列”,以 JSON 类型存储,作为兜底方案。...列存压缩更高效:低基数字段(如 region)可使用字典编码,减少存储空间;消除冗余存储:无需重复存储 JSON key;I/O 成本更低:查询只需读取被列化的字段;免解析执行:查询阶段不再解析 JSON...AND '2024-12-31' AND get_json_string(event, '$.region') = 'US'GROUP BY event_type;回到文首的示例查询:存储引擎只需读取...ZoneMap 会记录每个 Page 的最小值和最大值,在查询时可据此快速判断哪些 Page 可能命中过滤条件,从而跳过无关数据。

    35710

    SQL Server 索引和表体系结构(聚集索引+非聚集索引)

    非聚集索引 Index_id>1 可以结合语句查询 SELECT o.name AS table_name,p.index_id, i.name AS index_name , au.type_desc...ON au.container_id = p.partition_id JOIN sys.objects AS o ON p.object_id = o.object_id JOIN sys.indexes...C)下一级索引页的指针 对于叶子层的索引对象,它的结构包括: A)索引字段值 B)RowId 由于索引建值存储在索引页中,所以检索单独的索引键值效率是很高的,因为不需要定位到数据页在索引页中就能找到数据...包含经常包含在查询的搜索条件(例如返回完全匹配的 WHERE 子句)中的列 经常作为JOIN 或 GROUP BY 子句 尽量避免使用组合列建索引,除非组合列在where中有使用,否则可以用包含列索引替代组合索引...当索引包含查询中的所有列时,性能可以提升。查询优化器可以找到索引内的所有列值;不会访问表或聚集索引数据,这样就减少了磁盘 I/O 操作。使用具有包含列的索引来添加覆盖列,而不是创建宽索引键。

    2.7K101

    《SQL必知必会》万字浓缩精华

    如果表中的列可以作为主键,则它必须满足: 任意两行都不具有相同的主键值(主键列不允许NULL值) 每行都必须有一个主键值 主键列中的值不允许修改或者更新 主键值不能重用(如果某行从表中删除,则它的主键不能赋给以后的行记录...FROM Products GROUP BY vend_id; -- 分组的列 GROUP BY子句使用时候的常见规定: GROUP BY子句可以包含任意数目的列,可以对分组进行嵌套 GROUP...GROUP BY子句中列出 如果分组中包含具有NULL的行,则NULL将作为一个分组返回;如果列中出现多个NULL,它们将分成一个组 GROUP BY子句必须在WHERE子句之后,ORDER BY子句之前...要注意测试每个联结 十四、组合查询UNION 什么是组合查询 SQL允许执行多个查询(多条SELECT语句),并将结果作为一个查询结果集返回,这些组合通常称为并union或者复合查询;通常两种情况下需要使用组合查询...每个表中的列要么是NULL列,要么是NOT NULL列。 主键是其值唯一标识表中每一行的列。只有不允许NULL值的列可作为主键,允许NULL值的列不能作为唯一标识。 笔记:NULL是默认设置。

    8.5K31

    SQL必知必会总结

    如果表中的列可以作为主键,则它必须满足: 任意两行都不具有相同的主键值(主键列不允许NULL值) 每行都必须有一个主键值 主键列中的值不允许修改或者更新 主键值不能重用(如果某行从表中删除,则它的主键不能赋给以后的行记录...FROM Products GROUP BY vend_id; -- 分组的列 GROUP BY子句使用时候的常见规定: GROUP BY子句可以包含任意数目的列,可以对分组进行嵌套 GROUP BY...GROUP BY子句中列出 如果分组中包含具有NULL的行,则NULL将作为一个分组返回;如果列中出现多个NULL,它们将分成一个组 GROUP BY子句必须在WHERE子句之后,ORDER BY子句之前...要注意测试每个联结 十四、组合查询UNION 什么是组合查询 SQL允许执行多个查询(多条SELECT语句),并将结果作为一个查询结果集返回,这些组合通常称为并union或者复合查询;通常两种情况下需要使用组合查询...每个表中的列要么是NULL列,要么是NOT NULL列。 主键是其值唯一标识表中每一行的列。只有不允许NULL值的列可作为主键,允许NULL值的列不能作为唯一标识。 笔记:NULL是默认设置。

    10.4K30

    MySQL数据索引与优化

    列不能作为表达式的一部分,或者用作函数参数,否则失效。 当表更新操作远大于select操作时,不建议添加索引。...树在查找上时间复杂度居中(O(logn)),天然支持顺序。 存储引擎等块 每块数据长度不定,索引中至少必须存储磁盘id、起始号、偏移号这三个值。...如何高效率使用索引 独立列查询 SQL语句使用不当时,将无法使用现存索引而去全表扫描。所以需要注意:索引列不能是表达式的一部分,也不能是函数的参数。...多列索引合并 很多时候我们为了查询方便,为很多列单独创建索引。但我们在使用where筛选时,却多使用AND,OR等条件。...在创建多列索引时注意: - 通常将选择性高的字段放在前面 - 多列字段的前缀也可以作为索引(例如(a,b)索引时,可以单独使用a索引,但不能单独使用b索引) 聚簇索引 聚簇索引指的是一种数据组织结构

    1.3K51

    数据库进阶

    : insert into 表名 values(...) insert into students values(0,"张三",1,"李四","2002-6"); 4、部分插入(值的顺序与给出的列顺序对应...): insert into students(name, birthday) values("王五","2001-8"); 5、修改: update 表名 set 列1=值1,列2=值2 where...7、恢复: mysql -uroot -p 数据库名 sql 2、SQL的select语句完整的执行顺序 1、from 子句组装来自不同数据源的数据 2、where 子句基于指定的条件对记录行进行筛选...语句、分析慢查询 2、设计表的时候严格根据数据库的设计范式来设计数据库 3、使用缓存,把经常访问到的数据而且不需要经常变化的数据放在缓存中,能节约磁盘 I/O 4、优化硬件,采用 SSD,使用磁盘队列技术...注入是如何产生的,应如何防止 程序开发过程中不注意规范书写 SQL 语句和对特殊字符进行过滤,导致客户端可以通过全局变量 POST 和 GET 提交一些 SQL 语句正常执行,产生 SQL 注入 防止办法

    89410

    SQL必知必会总结2-第8到13章

    汇总数据 聚集函数 聚集函数指的是对某些行运行的一个函数,并且返回一个值,常用的聚集函数有: 函数 作用 AVG() 返回列的平均值 COUNT() 返回列的函数 MAX() 返回列的最大值 MIN()...FROM Products GROUP BY vend_id; -- 分组的列 GROUP BY子句使用时候的常见规定: GROUP BY子句可以包含任意数目的列,可以对分组进行嵌套 GROUP BY...GROUP BY子句中列出 如果分组中包含具有NULL的行,则NULL将作为一个分组返回;如果列中出现多个NULL,它们将分成一个组 GROUP BY子句必须在WHERE子句之后,ORDER BY子句之前...使用子查询 任何SELECT语句都是查询,SQL还允许在查询中嵌套查询。...使用子查询的另一个方法是创建计算字段 SELECT cust_name ,cust_state ,(SELECT COUNT(*) -- 将子查询作为一个计算字段输出:统计每个cust_id

    2.9K21

    SQLserver基础语句大全

    SQL 基础 结构化查询语言(Structured Query Language)简称 SQL,是一种特殊目的的编程语言, 是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统...SQL join SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。 Join 和 Key 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。...下面的 SQL 语句强制 “Id_P” 列和 “LastName” 列不接受 NULL 值: CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar...下面的 SQL 在 “Orders” 表创建时为 “Id_P” 列创建 FOREIGN KEY: CREATE TABLE Orders ( Id_O int NOT NULL PRIMARY KEY,...不支持) 返回某列的最高值 返回某列的最低值 返回某列的总和 as orderprice,'Bush' as as customer union all select '4' as o_id

    4.3K30
    领券