首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql小结(1) MYSQL索引特性小结

可以考虑不建索引,或者将其作为联合索引的第一项 7.Mysql中对于唯一性检查即声明unique的列,自动建立唯一性索引,不需要再额外建立索引 8.不应该对where中每一个查询条件都建立上索引,mysql...如果我们可以忍受,那么可以不建索引 3.使用短索引,索引长度不宜过大,利用B Tree的特性使用最左匹配查找高效利用索引第一列、对选择率高的列索引、使用覆盖索引避免回表查询 4.及时删除不再使用的索引,...当联合索引中,每一列的查询频率都相差不多时,可以优先将选择率最高的列作为联合索引第一列,这样第一列即可过滤更多列,效率更高。...选定的执行计划中查询的序列号。...index_merge:查询中同时使用两个(或更多)索引,然后对索引结果进行合并(merge),再读取表数据。

1.1K30

SQL查询的高级应用

例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定: SELECT username,citytable.cityid...二、 联合查询 UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联合查询。...ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询的结果集合中重复行将只保留一行。 联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。...与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。...而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。

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

    做完这套面试题,你才敢说懂Excel

    如上图所示,表2是每个成员对应的小组信息,要求为表1的销售员匹配上对应的小组信息。...vlookup函数在查找匹配上,的确是一个利器,但vlookup函数在查询的时候只能从左往右查询,且查询对象所在的列,必须要在查询区域的第一列,也就是说,只能通过A列来查询B列或其它列,而不能通过B列来逆查询...如在单元格D24中输入公式: =match(B24,$K$24:$K$28,0) 意思是,对B24单元格的值,即“高小明”,在区域K24:K28中,也就是在表2的“成员”列中进行匹配,看他是位于第几。...vlookup函数在查找匹配上,的确是一个利器,但vlookup函数在查询的时候只能从左往右查询,且查询对象所在的列,必须要在查询区域的第一列,也就是说,只能通过A列来查询B列或其它列,而不能通过B列来逆查询...如在单元格D24中输入公式: =match(B24,$K$24:$K$28,0) 意思是,对B24单元格的值,即“高小明”,在区域K24:K28中,也就是在表2的“成员”列中进行匹配,看他是位于第几。

    4.8K00

    查看Mysql执行计划

    这是const连接类型的特殊情况。 const :读常量,且最多只会有一条记录匹配。表中的一个记录的最大值能够匹配这个查询(索引可以是主键或惟一索引)。...eq_ref:最多只会有一条匹配结果,一般是通过主键或者唯一键索引来访问;在连接中,MYSQL在查询时,从前面的表中,对每一个记录的联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键的全部时使用...ref:Join 语句中被驱动表索引引用查询,这个连接类型只有在查询使用了不是惟一或主键的键或者是这些类型的部分(比如,利用最左边前缀)时发生。对于之前的表的每一个行联合,全部记录都将从表中读出。...unique_subquery:子查询中的返回结果字段组合是主键或者唯一约束 index_merge:查询中同时使用两个(或更多)索引,然后对索引结果进行merge 之后再读取表数据; index_subquery...:子查询中的返回结果字段组合是一个索引(或索引组合),但不是一个主键或者唯一索引; index:全索引扫描,这个连接类型对前面的表中的每一个记录联合进行完全扫描(比ALL更好,因为索引一般小于表数据)。

    3.3K10

    MySQL-多表操作

    并且若要排序生效,必须在ORDER BY后添加LIMIT限定联合查询排序的数量,通常推荐使用大于表记录数的任意值。 连接查询 交叉连接 交叉连接返回的结果是被连接的两个表中所有数据行的笛卡尔积。...SELECT 查询字段 FROM 表1 [INNER] JOIN 表2 ON 匹配条件; ON用于指定内连接的查询条件,在不设置ON时,与交叉连接等价。...但是在MySQL中,CROSS JOIN与INNER JOIN(或JOIN)语法的功能相同,都可以使用ON设置连接的筛选条件,可以互换使用,但是此处不推荐读者将交叉连接与内连接混用 左外连接 左外连接是外连接查询中的一种...表子查询 表子查询:子查询的返回结果用于FROM数据源,它是一个符合二维表结构的数据,可以是一行一列、一列多行、一行多列或多行多列。...外键约束 添加外键约束 外键指的是-一个表中引用另一个表中的一列或多列,被引用的列应该具有主键约束或唯一性约束, 从而保证数据的一-致性 和完整性。 ➢被引用的表称为主表。

    3.2K20

    SQL命令 UNION

    为了在SELECT语句之间实现联合,每个分支中指定的列数必须匹配。 指定具有不同列数的select将导致SQLCODE -9错误。...可以指定一个SELECT中的NULL列与另一个SELECT中的数据列配对,以匹配列的数量。...结果列名取自联合的第一个分支中的列(或列别名)的名称。 在两个分支中对应的列没有相同名称的情况下,在所有分支中使用相同的列别名来标识结果列可能会很有用。...如果任何UNION分支中的任何列是空的,则结果列元数据报告为空的。 UNION结果中的字符串字段具有相应SELECT字段的排序规则类型,但如果字段排序规则不匹配,则分配精确排序规则。...聚合函数不能包含DISTINCT或%FOREACH关键字。 聚合函数不能嵌套。 示例 下面的示例创建一个结果,其中包含两个表中每个Name的一行; 如果在两个表中都找到Name,则创建两行。

    1.6K20

    做完这套面试题,你才敢说懂Excel

    如上图所示,表2是每个成员对应的小组信息,要求为表1的销售员匹配上对应的小组信息。...vlookup函数在查找匹配上,的确是一个利器,但vlookup函数在查询的时候只能从左往右查询,且查询对象所在的列,必须要在查询区域的第一列,也就是说,只能通过A列来查询B列或其它列,而不能通过B列来逆查询...首先,用match函数来定位位置信息,查找出表1中的销售员,在表2中的位置。...如在单元格D24中输入公式: =match(B24,$K$24:$K$28,0) 意思是,对B24单元格的值,即“高小明”,在区域K24:K28中,也就是在表2的“成员”列中进行匹配,看他是位于第几。...我们观察一下“操作时间”列里的文本规律,发现每个操作都会有对应的文本标识,如“创建”时间前,是“创建”这两个关键字。“付款”时间前,是“付款”这两个关键字。

    2.3K10

    MySQL索引最左匹配原则及优化原理

    很明显,当按照索引中所有列进行精确匹配(这里精确匹配指“=”或“IN”匹配)时,索引可以被用到。...当查询条件精确匹配索引的左边连续一个或几个列时,如或,所以可以被用到,但是只能用到一部分,即条件所组成的最左前缀 上面的查询从分析结果看用到了PRIMARY索引,但是key_len为4,说明只用到了索引的第一列前缀...情况三:查询条件用到了索引中列的精确匹配,但是中间某个条件未提供 ?...看起来是用了两个范围查询,但作用于emp_no上的“BETWEEN”实际上相当于“IN”,也就是说emp_no实际是多值精确匹配。可以看到这个查询用到了索引全部三个列。...索引会加重插入、删除和修改记录时的负担,增加写操作的成本 太多索引会增加查询优化器的分析选择时间 MySQL在运行时也要消耗资源维护索引 索引并非越多越好,如下情况不推荐建索引 对于那些查询中很少涉及的列

    2.9K10

    谈谈MYSQL中的Explain

    中key_len被优化器选定的索引键长度,单位是字节ref表示本行被操作对象的参照对象,无参照对象为NULLrows查询执行所扫描的元组个数(对于innodb,此值为估计值)type关联类型或者访问类型...如果没有使用索引,则该列是 NULL。如果想强制mysql使用或忽视possible_keys列中的索引,在查询中使用 force index、ignore index。...举例来说,film_actor的联合索引 idx_film_actor_id 由 film_id 和 actor_id 两个int列组成,并且每个int是4字节。...index: Full Index Scan,index与ALL区别为index类型只遍历索引树range:只检索给定范围的行,使用一个索引来选择行ref: 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值...如将主键置于where列表中,MySQL就能将该查询转换为一个常量,system是const类型的特例,当查询的表只有一行的情况下,使用systemNULL: MySQL在优化过程中分解语句,执行时甚至不用访问表或索引

    26521

    索引合并Intersection、union (3)--单表访问方法(三十八)

    二级索引必须等值匹配,联合索引必须所有的列等值匹配 SELECT * FROM single_table WHERE key1 = 'a' AND key_part1 = 'a' AND key_part2...Union合并 Union在两个表取出并集可以用上,但这里不是在两个表使用,意思是sql语句取并集: 情况一,二级索引是等值匹配,联合索引必须每个列的值都等值匹配,不能只匹配部分列。...sql就不可以用union查询,原因是二级索引不能范围查询和联合索引必须所有列都在。...intersection合并索引查询,那如果吧他们建立一个联合索引直接用联合索引idx_key1_key3查询不也能搞定吧,但如果建立联合索引而放弃普通的单个二级索引的话,当需要把key3列单独查询,就没有索引了...总结:当二级索引两个列不是联合索引但是在一起查询的时候,有机会触发intersection合并查询和union查询。

    62530

    详解Mysql执行计划explain

    这是const连接类型的特殊情况。 const :读常量,且最多只会有一条记录匹配。表中的一个记录的最大值能够匹配这个查询(索引可以是主键或惟一索引)。...eq_ref:最多只会有一条匹配结果,一般是通过主键或者唯一键索引来访问;在连接中,MYSQL在查询时,从前面的表中,对每一个记录的联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键的全部时使用...ref:Join 语句中被驱动表索引引用查询,这个连接类型只有在查询使用了不是惟一或主键的键或者是这些类型的部分(比如,利用最左边前缀)时发生。对于之前的表的每一个行联合,全部记录都将从表中读出。...unique_subquery:子查询中的返回结果字段组合是主键或者唯一约束 index_merge:查询中同时使用两个(或更多)索引,然后对索引结果进行merge 之后再读取表数据; index_subquery...:子查询中的返回结果字段组合是一个索引(或索引组合),但不是一个主键或者唯一索引; index:全索引扫描,这个连接类型对前面的表中的每一个记录联合进行完全扫描(比ALL更好,因为索引一般小于表数据)。

    95820

    python 标准库 sqlite3 介绍(二)

    由于交叉连接(CROSS JOIN) 有可能产生非常大的表,或产生无意义的查询结果。...查询会把 table1 中的每一行与 table2 中的每一行进行比较,找到所有满足连接谓词的行的匹配对。当满足连接 谓词时,A 和 B 行的每个匹配对的列值会合并成一个结果行。...:") for row in c.fetchall(): print(row) print() '''自然连接(NATURAL JOIN)类似于 JOIN...USING,只是它会自动测试存在两个表中的每一列的值...一旦主连接计算完成,外连接(OUTER JOIN)将从一个或两个 表中任何未连接的行合并进来,外连接的列使用 NULL 值,将它们附加到结果表中。'''...UPDATE 更新数据: '''UPDATE 查询用于修改表中已有的数据。 使用带有 WHERE 子句的 UPDATE 查询来更新选定行,否则所有的行都会被更新。

    1.1K30

    MySQL索引B+树、执行计划explain、索引覆盖最左匹配、慢查询问题

    、DERIVED、UNION、UNION RESULT table 查询中涉及的表名或衍生表名 partitions 匹配的分区列表 type 连接类型 possible_keys 可能使用的索引列表...key 实际使用的索引名 key_len 实际使用的索引长度 ref 连接条件中的列被哪些字段或常量使用 rows 预计需要扫描的行数 filtered 从表中返回结果的行的百分比 Extra 包含有关如何处理查询的其他信息...index:Full Index Scan(Full Index Scan),用于遍历全部索引搜索索引中的所有条目以匹配查询,性能不稳定,通常不推荐使用。...2.2 最左前缀原则 最左前缀原则是指,在使用联合索引时,索引可以按照从左至右的顺序进行匹配,只有当左边所有的索引列都匹配成功后才会匹配右边的列。...该查询可以利用索引idx_name_age进行优化,因为该索引按照从左至右的顺序匹配了查询条件中的两个列。

    46200

    数据库索引,真的越建越好吗?

    若查询的是索引列索引或联合索引能覆盖的数据,则查询索引本身已经“覆盖”了需要的数据,无需再回表。这种情况也叫索引覆盖。...联合索引只能匹配左边的列 虽然对name和score建了联合索引,但仅按score列查询无法走索引 因为在联合索引情况下,数据按照索引第一列排序,第一列数据相同时才会按第二列排序。...若想使用联合索引中尽可能多的列,查询条件中的各个列必须是联合索引中从最左边开始连续的列。若仅按第二列搜索,肯定无法走索引。...所以要计算全表扫描的代价需要两个信息: 聚簇索引占用的页面数,用来计算读取数据的IO成本 表中的记录数,用来计算搜索的CPU成本 MySQL是实时统计的这些信息吗?...不能认为建了索引就一定有效,对于后缀的匹配查询、查询中不包含联合索引的第一列、查询条件涉及函数计算等无法使用索引。

    1.2K50

    explain 深入剖析 MySQL 索引及其性能优化指南

    此时key字段有两个或多个索引, key_len/rows都分别有两个数值; 如果是并集操作”Using intersect”, 往往通过两个索引的字段,合并为一个索引,避免index_merge查询...如果MySQL只使用索引中的firstname部分,则key_len将是50。 在不损失精确性的情况下 ,key_len数据列里的值越小越好(意思是更快)。...8.ref:显示使用哪个列或常数与key一起从表中选择行。 ref数据列给出了关联关系中另一个数据表里的数据列的名字。 9.rows:MySQL所认为的它在找到正确的结果之前必须扫描的记录数。...如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题 先说到这,下面一篇给大家总结下如何选择索引列以及使用索引的注意事项。...extra列返回的描述的意义: 值 意义 Distinct 一旦MySQL找到了与行相联合匹配的行,就不再搜索了。

    1.8K60

    数据库索引,真的越建越好吗?

    若查询的是索引列索引或联合索引能覆盖的数据,则查询索引本身已经“覆盖”了需要的数据,无需再回表。这种情况也叫索引覆盖。...联合索引只能匹配左边的列 虽然对name和score建了联合索引,但仅按score列查询无法走索引 因为在联合索引情况下,数据按照索引第一列排序,第一列数据相同时才会按第二列排序。...若想使用联合索引中尽可能多的列,查询条件中的各个列必须是联合索引中从最左边开始连续的列。若仅按第二列搜索,肯定无法走索引。...所以要计算全表扫描的代价需要两个信息: 聚簇索引占用的页面数,用来计算读取数据的IO成本 表中的记录数,用来计算搜索的CPU成本 MySQL是实时统计的这些信息吗?...不能认为建了索引就一定有效,对于后缀的匹配查询、查询中不包含联合索引的第一列、查询条件涉及函数计算等无法使用索引。

    1.3K50

    一分钟学会VLOOKUP

    VLOOKUP是什么 想必大家对VLOOKUP都有一定的了解,都知道是可以在指定的数据集合中查询你想要匹配的数据。 俗话说:VLOOKUP老是记不住,多半是。。。...注意:这里的近似匹配不一定就是想象中的字符包含的关系,在微软官方文档中的技术细节中可以找到: 近似匹配-1/TRUE假设表中的第一列按数值或字母顺序排序, 然后将搜索最接近的值。...这是未指定值时的默认方法。 举例: 两个数据区域,现在需要通过VLOOKUP将下面表格内的年龄对应拼接到第一个表的后面: ?...演示一下如何使用: 解释: 第一个参数选择了学号,第二个选择下方的数据表,意思是将在下方的数据表中查询这个学号值以及选定区域的同一行其他列。 第三个参数3是展示选定区域的第三列年龄列。...第四个参数一般情况下建议直接使用0,不填写则默认是1,如果需要使用模糊匹配则可以使用通配符。

    1K30

    【mysql系列】细谈explain执行计划之“谜”

    : 查询类型,主要用于区别普通查询,联合查询,子查询等的复杂查询 1.simple ——简单的select查询,查询中不包含子查询或者UNION 2.primary ——查询中若包含任何复杂的子部分,最外层查询被标记...从图中ID列,我们看到ID=2的先执行即先查询teacher表。 select_type simple 简单的select查询,查询中不包含子查询或者UNION; ?...eq_ref 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或 唯一索引扫描。...) 不损失精确性的情况下,长度越短越好,长度越短,索引校验匹配效率越高。...ref 显示在key列索引中,表查找值所用到的列或常量,一般比较常见为const或字段名称。 ?

    91710

    【肝帝一周总结:全网最全最细】☀️Mysql 索引数据结构详解与索引优化☀️《❤️记得收藏❤️》

    ️‍1、索引 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储数据结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。...其中三个字段就是联合索引。 由于联合索引的出现,key 由多个列组成,列的排序决定了可命中索引的列数。也叫最左前缀匹配。...5、联合索引 联合索引是指对表上的多个列进行索引。如下图联合索引原理图 InnoDB 存储引擎支持覆盖索引,即从辅助索引中就可以得到查询的记录,不需要查询聚簇索引中的记录了。...例如,联合索引(a,b,c,d), 查询条件 a=1 and b=3 and c>3 and d=4; 会依次命中 a,b,c,无法命中 d,这就是最左前缀匹配。 两个或以上的列上的索引。...如果是联合索引,那么 key 也由多个列组成,同时,索引只能用于查找 key 是否存在(相等),遇到范围查询 (>、匹配) 等就不能进一步匹配了,后续退化为线性查找。

    82110

    MySQL最左匹配原则,道儿上兄弟都得知道的原则

    为什么数据库会让我们选择字段的顺序呢?不都是三个字段的联合索引么?这里就引出了数据库索引的最重要的原则之一,最左匹配原则。   ...一、最左匹配原则的原理 MySQL 建立多列索引(联合索引)有最左匹配的原则,即最左优先: 如果有一个 2 列的索引 (a, b),则已经对 (a)、(a, b) 上建立了索引; 如果有一个 3...列索引 (a, b, c),则已经对 (a)、(a, b)、(a, b, c) 上建立了索引; 假设数据 表 LOL (id,sex,price,name) 的物理位置(表中的无序数据)如下: (...,所以只能把 a = 1 的数据主键ID都找到,通过查到的主键ID回表查询相关行,再去匹配 c = ‘JJJ疾风剑豪’ 的数据了,当然,这至少把 a = 1 的数据筛选出来了,总比直接全表扫描好多了。...这就是MySQL非常重要的原则,即索引的最左匹配原则。 三、查询优化器偷偷干了哪些事儿 当对索引中所有列通过"=" 或 “IN” 进行精确匹配时,索引都可以被用到。

    4.6K20
    领券