Bla*_*bam 3 mysql index optimization transaction query-performance
为了优化 SELECT 语句,我尝试在 MySQL 中使用以下 SQL 语句使索引唯一:
ALTER TABLE credentials DROP INDEX special_credential_id, ADD UNIQUE KEY special_credential_id(special_credential_id)
我的问题是:这是一笔交易吗?这意味着如果创建唯一索引失败,旧的special_credential_id索引是否仍然存在?通常创建一个新索引很容易,但我们讨论的是包含 100 个 Mio 条目的表。
这是一笔交易。它应该按原样工作,但请按照以下两个步骤操作:
在执行此操作之前,请测试唯一性。运行此计数查询:
SELECT special_credential_id,COUNT(1) cnt FROM credentials
GROUP BY special_credential_id HAVING COUNT(1) > 1;
Run Code Online (Sandbox Code Playgroud)
如果有任何行返回(即不是“空集”),请修复键以使它们是唯一的。否则,继续
我会将其作为在线 DDL 执行
ALTER TABLE credentials
DROP INDEX special_credential_id
,ADD UNIQUE KEY special_credential_id (special_credential_id)
,ALGORITHM=INPLACE
,LOCK=NONE
;
Run Code Online (Sandbox Code Playgroud)
如果您担心这不起作用,请分两步进行
ALTER TABLE credentials
ADD UNIQUE KEY special_credential_id_2 (special_credential_id)
,ALGORITHM=INPLACE
,LOCK=NONE
;
ALTER TABLE credentials
DROP INDEX special_credential_id
,ALGORITHM=INPLACE
,LOCK=NONE
;
Run Code Online (Sandbox Code Playgroud)