mysql不能输入中文可以卸载怎么回事
状态:MySQL终端状态下不能输入中文,一般是因为修改了/etc/mysql/conf.d/mysql.cnf,在[mysql]的下方添加了如下语句:default-character-set=utf...
2024.11.22索引合并是mysql底层为我们提供的智能算法。本文就介绍了mysql 索引合并的使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
索引合并是mysql底层为我们提供的智能算法。了解索引合并的算法,有助于我们更好的创建索引。
索引合并是通过多个range类型的扫描并且合并它们的结果集来检索行的。仅合并来自单个表的索引扫描,而不是跨多个表的索引扫描。合并会产生底层扫描的三种形式:unions(合并)、intersections(交集)、unions-of-intersections(先取交集再合并)。
以下四个例子会产生索引合并:
select * FROM tbl_name WHERE key1 = 10 OR key2 = 20;select * FROM tbl_name WHERE (key1 = 10 OR key2 = 20) AND non_key = 30;select * FROM t1, t2 WHERE (t1.key1 IN (1,2) OR t1.key2 LIKE ‘value%‘) AND t2.key1 = t1.some_col;select * FROM t1, t2 WHERE t1.key1 = 1 AND (t2.key1 = t1.some_col OR t2.key2 = t1.some_col2);索引合并有以下已知的局限性:
1、如果查询语句包含一个带有严重AND/OR嵌套的复杂的WHERE子句而MySQL没有选择最佳计划,那么可以尝试使用以下的标志符转换:
(x AND y) OR z => (x OR z) AND (y OR z)(x OR y) AND z => (x AND z) OR (y AND z)2、索引合并不适用于全文索引。
在 EXPLAIN 语句输出的信息中,索引合并在type列中表现为“index_merge”,在这种情况下,key列包含使用的索引列表。索引合并访问方法有几种算法,表现在 EXPLAIN 语句输出的Extra字段中:
Using intersect(...)Using union(...)Using sort_union(...)下面将更详细地描述这些算法。优化器根据各种可用选项的成本估计,在不同的索引合并算法和其他访问方法之间进行选择。
Index Merge Intersection算法
Index Merge Intersection算法对所有使用的索引执行同步扫描,并生成从合并的索引扫描接收到的行序列的交集。
这种算法适用于当WHERE子句被转换成多个使用AND连接的不同索引key上的范围条件,且条件是以下两种之一:
一、这种形式的N部分表达式,索引正好包括N个字段(所有索引字段都被覆盖),N>=1,N如果大于1就是复合索引:
key_part1 = const1 AND key_part2 = const2 ... AND key_partN = constN。二、InnoDB表主键上的任何范围条件。
例子:
select * FROM innodb_tableWHERE primary_key < 10 AND key_col1 = 20;select * FROM tbl_nameWHERE key1_part1 = 1 AND key1_part2 = 2 AND key2 = 2;Index Merge Union算法
该算法类似于Index Merge Intersection算法,适用于当WHERE子句被转换成多个使用OR连接的不同索引key上的范围条件,且条件是以下三种之一:
一、这种形式的N部分表达式,索引正好包括N个字段(所有索引字段都被覆盖),N>=1,N如果大于1就是复合索引:
key_part1 = const1 AND key_part2 = const2 ... AND key_partN = constN。二、InnoDB表主键上的任何范围条件。
三、符合Index Merge Intersection算法的条件。
例子:
select * FROM t1WHERE key1 = 1 OR key2 = 2 OR key3 = 3;select * FROM innodb_tableWHERE (key1 = 1 AND key2 = 2)OR (key3 = ‘foo‘ AND key4 = ‘bar‘) AND key5 = 5;Index Merge Sort-Union算法
该算法适用于当WHERE子句被转换成多个使用OR连接的不同索引key上的范围条件,但是不符合 Index Merge Union算法的。Index Merge Sort-Union和Index Merge Union算法的区别在于,Index Merge Sort-Union必须首先获取所有行的行id并在返回任何行之前对它们进行排序。
例子:
select * FROM tbl_nameWHERE key_col1 < 10 OR key_col2 < 20;select * FROM tbl_nameWHERE (key_col1 > 10 OR key_col2 = 20) AND nonkey_col = 30;到此这篇关于mysql 索引合并的使用的文章就介绍到这了
mysql 索引合并 | 《Linux就该这么学》 (linuxprobe.com)
状态:MySQL终端状态下不能输入中文,一般是因为修改了/etc/mysql/conf.d/mysql.cnf,在[mysql]的下方添加了如下语句:default-character-set=utf...
2024.11.221、现有员工表如下:emp:empno(员工编号),empname(员工名称)sal(员工薪资)1)查询员工的名字和薪资,按照员工的薪资倒序,薪资一样时,按照员工名字正序排。select ename ...
2024.11.23MySQL索引有哪些类型MySQL目前主要有以下几种索引类型:普通索引:最基本的索引,没有任何限制条件。唯一索引:与普通索引类似,但要求索引列的值唯一,不允许重复。主键索引:是一种特殊的唯一索引,不允...
2024.11.20前提条件: 一张主表 (dl_data_task)表数据表字段 一张关系表(dl_data_task_model_map)表数据表字段 现在的问题: 如何在获取主表信息的同时将 对应的 mod...
2024.11.22MySQl中有多种表示日期和时间的数据类型。其中YEAR表示年份,DATE表示日期,TIME表示时间,DATETIME和TIMESTAMP表示日期和实践。它们的对比如下:YEAR ,字节数为1,取值...
2024.11.20