求教MYSQL数据库合并问题

求教MYSQL数据库合并问题,第1张

首先把要改的表名字都找出来(比如表名分别是characters1,characters2,characters3,characters4),如果想要连续的话,就把每张表你想要开始的guid找到,按昨天我写的语句就行了(select count(*) from characters1)分别找.

然后每张表只要一条语句就搞定了;在想要重新为guid编号的库中执行如下语句就行了

update characters1 set guid=guid + 200000

--(把这里的200000换成你想要的开的数字(你用select count(*) from characters1查出的个数加1)就行了,如果不再呼连续性,选个大点的数直接执行就可以了)

update characters2 set guid=guid + 200000

update characters3 set guid=guid + 200000

update characters4 set guid=guid + 200000

把四条语句粘在你的客端里同时执行就行。

假如上面的 *** 作是在B库中执行的,没执的库叫A库

完成后再个库中的characters1,characters2,characters3,characters4这几个表中的guid就再也没有重复的了。

整个过程不会长过20分钟。

索引合并检索方法可以检索多个范围扫描并将结果合并。这种访问方法只能合并同一个表的索引扫描,不能合并跨表扫描。

合并可能生成基础扫描结果的"并集","交集",或者"交集的并集"

示例:

这种方法适用于 WHERE 子句中的条件是通过 AND 结合的不同索引的范围条件时,其中的每个条件都需要满足下列条件之一:

示例:

索引合并交集算法在所有使用的索引上同时进行扫描,并从扫描结果中生成行的交集

如果查询中的所有列都被使用的索引覆盖,不需要检索所有表行( EXPLAIN 输出中的 Extra 列中包括 Using index )。例如这个语句:

SELECT COUNT(*) FROM t1 WHERE key1 = 1 AND key2 = 1

如果使用的索引没有覆盖查询中所有的行,只有当所有使用的索引的范围条件满足时才检索整个行。

如果合并条件中包括 Innodb 表主键索引条件,主键并不用来检索数据,而是用来筛选使用其他条件检索出的行。 # 就是先通过其他的范围条件筛选出一部分数据,在从这部分数据中,通过主键来筛选出最终的结果

这种方法适用于 WHERE 子句中的条件是通过 OR 结合的不同索引的范围条件时,其中的每个条件都需要满足下列条件之一:

示例:

这种方法适用于 WHERE 子句中的条件是通过 OR 结合的不同索引的范围条件,但是不能使用 Index Merge Union 算法的情景

示例:

sort_union 和 union 算法的区别是, sort_union 必须在返回行数据前先获取行ID并对行ID进行排序。

在 optimizer_swith 中有4个关于 Index Merge 的变量:

index_merge,index_merge_intersection,index_merge_union,index_merge_sort_union

默认情况下都是启用的。要单独启用某个算法,设置 index_merge=off ,并将相应的标志设置为 on


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8623591.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存