已有数据的表-建联合索引

清理重复数据,建立联合唯一索引

1. 查看重复数据

SELECT * FROM holiday_focamobilerel
WHERE (cardnumber, mobile) IN (SELECT cardnumber, mobile FROM holiday_focamobilerel GROUP BY cardnumber, mobile HAVING COUNT(1) > 1);

2. 删除重复数据

- 保留order_id and sub_order_id不为空的

- 如果order_id和sub_order_id都为空,保留id最大的

DELETE FROM holiday_focamobilerel h
WHERE (cardnumber, mobile) IN (SELECT cardnumber, mobile FROM holiday_focamobilerel GROUP BY cardnumber, mobile HAVING COUNT(1) > 1)
AND h.id NOT IN (select id from holiday_focamobilerel h where h.order_id  is not null  or h.sub_order_id  is not null )
and h.id not in (SELECT MAX(id) FROM holiday_focamobilerel GROUP BY cardnumber, mobile HAVING COUNT(1) > 1);

3. 建立联合唯一约束

alter table holiday_focamobilerel add constraint cardnumber_mobile_key unique("cardnumber","mobile")

原文地址:https://www.cnblogs.com/weihengblog/p/10320394.html

时间: 2024-08-02 22:00:26

已有数据的表-建联合索引的相关文章

表建立联合索引

表建立联合索引后,以两个字段为例,如果想查询速度快,where条件中要么带上两个字段,要么带上前面的,如果只有后面的不会变快. 实例:以下联合索引:itemid和clock 这个联合索引 如果where字段查clock的话 是不能走索引的, 所以查询会慢 . 要想查询变快的话,查itemid,或者两个一起查.

sql server 对已有数据的表,添加核查约束 [失败],请使用with nocheck 子句

一.在已有数据表中,添加一个约束,但不让这个约束使用到已存在的数据中,在执行ALTER TABLE语句添加时使用WITH NOCHECK子句,这样新增的约束就不会去约束已存在的数据,而只会对新增的数据进行约束检查: alter table [tablename] with nochek add constraint [ ck_XXX] check (核查条件) 二.NOCHECK还可以禁用约束,禁用就不用删除这个约束: alter table [tablename] nocheck constr

对于有大量重复数据的表添加唯一索引

遇到如题的这么一个场景:需要在MySQL的一张innodb引擎的表(tableA)上添加一个唯一索引(idx_col1_u).但是表中已经有大量重复数据,对于每个key(col1),有的重复2行,有的重复N行. 此时,做数据的手工清理,或者SQL处理无疑是非常耗时的. 1. Alter ignore table come to help 印象中MySQL有一个独有的 alter ignore add unique index的语法. 语法如下: ALTER [ONLINE | OFFLINE]

MySQL 已有大数据量表进行分区踩坑

一.背景mysql 表中已有 4 亿数据,为提高查询效率,需创建分区,一开始计划是创建 HASH 分区,结果报错:ERROR 1659 (HY000): Field 'partno' is of a not allowed type for this type of partitioning1 查询得知报错原因,HASH 分区只支持数字分区,而我要分区的字段是 varchar 类型,故改用 KEY 分区二.解决 KEY 分区语句: alter table TABLENAME PARTITION

【索引】联合索引的基本知识

0.预备 假设我们有表 user (id,name)列 1.联合索引是个什么东西 我们知道,对于表的单列(如id)数据,是可以建立索引的,对于多列(id和name组合,或者,name和id组合),也可以建立索引.联合索引,也称之为组合索引. 先来看单列索引的逻辑结构. 由此得出索引的三个特征:索引有序+高度较低+存储列值 联合索引也满足这三个特征,但这里的逻辑图就不画了,而是以更直观的方式来展现其查找逻辑,这里应注意,联合索引的列有前后,以id列在前.name列在后为例. 建联合索引前的情况 建

MySQL联合索引

在一次查询中,MySQL只能使用一个索引. 在真实项目中,SQL语句中的WHERE子句里通常会包含多个查询条件还会有排序.分组等. 若表中索引过多,会影响INSERT及UPDATE性能,简单说就是会影响数据写入性能.因为更新数据的同时,也要同时更新索引. 最实际的好处当然是查询速度快,性能好. 使用联合索引应该注意: MySQL使用联合索引只能使用左侧的部分,例如INDEX(a,b,c),当条件为a或a,b或a,b,c时都可以使用索引,但是当条件为b,c时将不会使用索引.这好比一本先根据姓,再根

单列索引和联合索引区别

原文链接:https://blog.csdn.net/Abysscarry/article/details/80792876 一.联合索引测试 注:Mysql版本为 5.7.20 我们为userId, mobile, billMonth三个字段添加上联合索引! 1.查询条件为 mobile and userid EXPLAIN SELECT * FROM `t_mobilesms_11` WHERE mobile='13281899972' AND userid='2222' 1 调换了查询条件

mysql索引 多个单列索引和联合索引的区别详解

背景: 为了提高数据库效率,建索引是家常便饭:那么当查询条件为2个及以上时,我们是创建多个单列索引还是创建一个联合索引好呢?他们之间的区别是什么?哪个效率高呢?我在这里详细测试分析下. 一.联合索引测试注:Mysql版本为 5.7.20 创建测试表(表记录数为63188): CREATE TABLE `t_mobilesms_11` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `userId` varchar(255) CHARACTER SET utf

点评阿里JAVA手册之MySQL数据库 (建表规约、索引规约、SQL语句、ORM映射)

下载原版阿里JAVA开发手册  [阿里巴巴Java开发手册v1.2.0] 本文主要是对照阿里开发手册,注释自己在工作中运用情况. 本文内容:MySQL数据库 (建表规约.索引规约.SQL语句.ORM映射) 本文难度系数为三星(★★★) 本文为第四篇 第一篇 点评阿里JAVA手册之编程规约(命名风格.常量定义.代码风格.控制语句.注释规约) 第二篇 点评阿里JAVA手册之编程规约(OOP 规约 .集合处理 .并发处理 .其他) 第三篇 点评阿里JAVA手册之异常日志(异常处理 日志规约 ) 第四篇