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

经验:在MySQL数据库,这4种方式可以避免重复插入数据!

作者:小小猿爱嘻嘻 wukong.com/question/6749061190594330891/ 最常见方式就是为字段设置主键或唯一索引,当插入重复数据时,抛出错误,程序终止,但这会给后续处理带来麻烦...,因此需要对插入语句做特殊处理,尽量避开或忽略异常,下面我简单介绍一下,感兴趣朋友可以尝试一下: 这里为了方便演示,我新建了一个user测试表,主要有id,username,sex,address这4...个字段,其中主键为id(自增),同时对username字段设置了唯一索引: 01 insert ignore into 即插入数据时,如果数据存在,则忽略此次插入,前提条件是插入数据字段设置了主键或唯一索引...,这种方式适合于插入数据字段没有设置主键或唯一索引,当插入一条数据时,首先判断MySQL数据库是否存在这条数据,如果不存在,则正常插入,如果存在,则忽略: ?...目前,就分享这4种MySQL处理重复数据方式吧,前3种方式适合字段设置了主键或唯一索引,最后一种方式则没有此限制,只要你熟悉一下使用过程,很快就能掌握,网上也有相关资料和教程,介绍非常详细,感兴趣的话

4.4K40
您找到你想要的搜索结果了吗?
是的
没有找到

MySQL 排序艺术

,取得 id 之后回表(回到主键索引)取得 nick_name 这个与排序相关字段和主键 id 一起放入 sort buffer 从 city 索引树取下一条值为深圳数据,重复 1 过程,直到下一条数据不满足值为深圳条件...对 nick_name 执行快速排序 利用排序好数据,使用主键 id 再次回表取其他字段,将结果返回 注意:在步骤 4 不会等所有排序好 id 回表完再返回,而是每个 id 回表一次,取得该行数据之后立即返回...现在我们知道有全字段排序和 rowId 排序,那么 MySQL 是如何在这两种排序方案选择呢?...由于 rowId 排序相对于全字段排序,不可避免多了一次回表操作,回表操作意味着随机读,而随机 IO 是数据库中最昂贵操作。 所以 MySQL 会在尽可能情况下选择全字段排序。...如果当前 MySQL 使用是内存临时表的话,将会直接使用 rowId 排序,因为这时候所谓“回表”只是在内存表读数据,操作不涉及硬盘随机 IO 读。

1.7K30

MySQL 排序艺术:你真的懂 Order By 吗?

,取得 id 之后回表(回到主键索引)取得 nick_name 这个与排序相关字段和主键 id 一起放入 sort buffer 从 city 索引树取下一条值为深圳数据,重复 1 过程,直到下一条数据不满足值为深圳条件...对 nick_name 执行快速排序 利用排序好数据,使用主键 id 再次回表取其他字段,将结果返回 注意:在步骤 4 不会等所有排序好 id 回表完再返回,而是每个 id 回表一次,取得该行数据之后立即返回...现在我们知道有全字段排序和 rowId 排序,那么 MySQL 是如何在这两种排序方案选择呢?...由于 rowId 排序相对于全字段排序,不可避免多了一次回表操作,回表操作意味着随机读,而随机 IO 是数据库中最昂贵操作。 所以 MySQL 会在尽可能情况下选择全字段排序。...如果当前 MySQL 使用是内存临时表的话,将会直接使用 rowId 排序,因为这时候所谓“回表”只是在内存表读数据,操作不涉及硬盘随机 IO 读。

2.3K50

你该来感受下 MySQL 排序艺术 ...

,取得 id 之后回表(回到主键索引)取得 nick_name 这个与排序相关字段和主键 id 一起放入 sort buffer 从 city 索引树取下一条值为深圳数据,重复 1 过程,直到下一条数据不满足值为深圳条件...现在我们知道有全字段排序和 rowId 排序,那么 MySQL 是如何在这两种排序方案选择呢?...由于 rowId 排序相对于全字段排序,不可避免多了一次回表操作,回表操作意味着随机读,而随机 IO 是数据库中最昂贵操作。 所以 MySQL 会在尽可能情况下选择全字段排序。...如果当前 MySQL 使用是内存临时表的话,将会直接使用 rowId 排序,因为这时候所谓“回表”只是在内存表读数据,操作不涉及硬盘随机 IO 读。...rowId 排序还是全字段排序,优先选择全字段排序,以减少回表次数 当需要借助临时表时候,MySQL 会优先使用内存临时表(此时表引擎为 memory 引擎),回内存临时表取数据并不涉及随机读,也不涉及扫描行

76710

值得收藏:一份非常完整 MySQL 规范

2)对于非负型数据(自增ID、整型IP)来说,要优先使用无符号整型来存储 因为:无符号相对于有符号可以多出一倍存储空间 ?...,通常将1、2字段建立联合索引效果更好 · 多表join关联列 六、如何选择索引列顺序 建立索引目的是:希望通过索引进行数据查找,减少随机IO,增加查询性能 ,索引能过滤出越少数据,则从磁盘读入数据也就越少...七、避免建立冗余索引和重复索引 因为这样会增加查询优化器生成执行计划时间。...· 重复索引示例:primary key(id)、index(id)、unique index(id) · 冗余索引示例:index(a,b,c)、index(a,b)、index(a) 八、优先考虑覆盖索引...:select name,phone from customer where id = '111'; 3、充分利用表上已经存在索引 · 避免使用双%号查询条件。

89030

值得收藏:一份非常完整 MySQL 规范

2)对于非负型数据(自增ID、整型IP)来说,要优先使用无符号整型来存储 因为:无符号相对于有符号可以多出一倍存储空间 VARCHAR(N)N代表是字符数,而不是字节数 使用UTF8存储255...,通常将1、2字段建立联合索引效果更好 · 多表join关联列 六、如何选择索引列顺序 建立索引目的是:希望通过索引进行数据查找,减少随机IO,增加查询性能 ,索引能过滤出越少数据,则从磁盘读入数据也就越少...七、避免建立冗余索引和重复索引 因为这样会增加查询优化器生成执行计划时间。...· 重复索引示例:primary key(id)、index(id)、unique index(id) · 冗余索引示例:index(a,b,c)、index(a,b)、index(a) 八、优先考虑覆盖索引...:select name,phone from customer where id = '111'; 3、充分利用表上已经存在索引 · 避免使用双%号查询条件。

74030

值得收藏:一份非常完整 MySQL 规范

IO) 更有效利用缓存,避免读入无用冷数据 经常一起使用列放到一个表避免更多关联操作) 7、禁止在表建立预留字段 预留字段命名很难做到见名识义 预留字段无法确认存储数据类型,所以无法选择合适类型...,通常将1、2字段建立联合索引效果更好 · 多表join关联列 六、如何选择索引列顺序 建立索引目的是:希望通过索引进行数据查找,减少随机IO,增加查询性能 ,索引能过滤出越少数据,则从磁盘读入数据也就越少...七、避免建立冗余索引和重复索引 因为这样会增加查询优化器生成执行计划时间。...· 重复索引示例:primary key(id)、index(id)、unique index(id) · 冗余索引示例:index(a,b,c)、index(a,b)、index(a) 八、优先考虑覆盖索引...:select name,phone from customer where id = '111'; 3、充分利用表上已经存在索引 · 避免使用双%号查询条件。

94230

一份完整 MySQL 开发规范,进大厂必看!

,通常将1、2字段建立联合索引效果更好 3、多表join关联列 六、如何选择索引列顺序 建立索引目的是:希望通过索引进行数据查找,减少随机IO,增加查询性能 ,索引能过滤出越少数据,则从磁盘读入数据也就越少...七、避免建立冗余索引和重复索引 因为这样会增加查询优化器生成执行计划时间。...重复索引示例:primary key(id)、index(id)、unique index(id) 冗余索引示例:index(a,b,c)、index(a,b)、index(a) 八、优先考虑覆盖索引...:select name,phone from customer where id = '111'; 3、充分利用表上已经存在索引 避免使用双%号查询条件。...12、禁止使用order by rand() 进行随机排序 会把表中所有符合条件数据装载到内存,然后在内存对所有数据根据随机生成值进行排序,并且可能会对每一行都生成一个随机值,如果满足条件数据集非常大

1.2K20

值得收藏:一份非常完整 MySQL 规范(二)

六、如何选择索引列顺序 建立索引目的是:希望通过索引进行数据查找,减少随机 IO,增加查询性能 ,索引能过滤出越少数据,则从磁盘读入数据也就越少。...使用最频繁列放到联合索引左侧(这样可以比较少建立一些索引)。 七、避免建立冗余索引和重复索引 因为这样会增加查询优化器生成执行计划时间。...重复索引示例:primary key(id)、index(id)、unique index(id) 冗余索引示例:index(a,b,c)、index(a,b)、index(a) 八、优先考虑覆盖索引...避免数据类型隐式转换 隐式转换会导致索引失效。: select name,phone from customer where id = '111'; 3....a like '%123%',(如果无前置 %,只有后置 %,是可以用到列上索引) 一个 SQL 只能利用到复合索引一列进行范围查询 :有 a,b,c 列联合索引,在查询条件中有 a 列范围查询

1.1K20

MySQL 高性能优化规范建议

, 通常将 1、2 字段建立联合索引效果更好 多表 join 关联列 ---- 5.如何选择索引列顺序 建立索引目的是:希望通过索引进行数据查找,减少随机 IO,增加查询性能 ,索引能过滤出越少数据...避免建立冗余索引和重复索引(增加了查询优化器生成执行计划时间) 重复索引示例:primary key(id)、index(id)、unique index(id) 冗余索引示例:index(a,b,c...避免数据类型隐式转换 隐式转换会导致索引失效: select name,phone from customer where id = '111'; 3....充分利用表上已经存在索引 避免使用双%号查询条件。:a like '%123%',(如果无前置%,只有后置%,是可以用到列上索引) 一个 SQL 只能利用到复合索引一列进行范围查询。...推荐在程序获取一个随机值,然后从数据库获取数据方式。 13.

45510

值得收藏:一份非常完整 MySQL 规范

IO) 更有效利用缓存,避免读入无用冷数据 经常一起使用列放到一个表避免更多关联操作) 7、禁止在表建立预留字段 预留字段命名很难做到见名识义 预留字段无法确认存储数据类型,所以无法选择合适类型...,通常将1、2字段建立联合索引效果更好 · 多表join关联列 六、如何选择索引列顺序 建立索引目的是:希望通过索引进行数据查找,减少随机IO,增加查询性能 ,索引能过滤出越少数据,则从磁盘读入数据也就越少...七、避免建立冗余索引和重复索引 因为这样会增加查询优化器生成执行计划时间。...· 重复索引示例:primary key(id)、index(id)、unique index(id) · 冗余索引示例:index(a,b,c)、index(a,b)、index(a) 八、优先考虑覆盖索引...:select name,phone from customer where id = '111'; 3、充分利用表上已经存在索引 · 避免使用双%号查询条件。

47930

今儿聊一聊Mysql性能优化

, 通常将1、2字段建立联合索引效果更好 多表join关联列 ---- 如何选择索引列顺序 建立索引目的是:希望通过索引进行数据查找,减少随机IO,增加查询性能 ,索引能过滤出越少数据,则从磁盘读入数据也就越少...(这样可以比较少建立一些索引) ---- 避免建立冗余索引和重复索引(增加了查询优化器生成执行计划时间) 重复索引示例:primary key(id)、index(id)、unique index(...避免数据类型隐式转换 隐式转换会导致索引失效: select name,phone from customer where id = '111'; 3....充分利用表上已经存在索引 避免使用双%号查询条件。:a like '%123%',(如果无前置%,只有后置%,是可以用到列上索引) 一个SQL只能利用到复合索引一列进行范围查询。...推荐在程序获取一个随机值,然后从数据库获取数据方式。 13.

61270

11条MySQL规范,你知道有几个?

IO) 更有效利用缓存,避免读入无用冷数据 经常一起使用列放到一个表避免更多关联操作) 7、禁止在表建立预留字段 预留字段命名很难做到见名识义 预留字段无法确认存储数据类型,所以无法选择合适类型...2)对于非负型数据(自增ID、整型IP)来说,要优先使用无符号整型来存储 因为:无符号相对于有符号可以多出一倍存储空间 VARCHAR(N)N代表是字符数,而不是字节数 使用UTF8存储255...,通常将1、2字段建立联合索引效果更好 · 多表join关联列 六、如何选择索引列顺序 建立索引目的是:希望通过索引进行数据查找,减少随机IO,增加查询性能 ,索引能过滤出越少数据,则从磁盘读入数据也就越少...· 重复索引示例:primary key(id)、index(id)、unique index(id) · 冗余索引示例:index(a,b,c)、index(a,b)、index(a) 八、优先考虑覆盖索引...:select name,phone from customer where id = '111'; 3、充分利用表上已经存在索引 · 避免使用双%号查询条件。

66840

值得收藏:一份非常完整MySQL规范

IO) 更有效利用缓存,避免读入无用冷数据 经常一起使用列放到一个表避免更多关联操作) 7、禁止在表建立预留字段 预留字段命名很难做到见名识义 预留字段无法确认存储数据类型,所以无法选择合适类型...,通常将1、2字段建立联合索引效果更好 多表join关联列 六、如何选择索引列顺序 建立索引目的是:希望通过索引进行数据查找,减少随机IO,增加查询性能 ,索引能过滤出越少数据,则从磁盘读入数据也就越少...七、避免建立冗余索引和重复索引 因为这样会增加查询优化器生成执行计划时间。...重复索引示例:primary key(id)、index(id)、unique index(id) 冗余索引示例:index(a,b,c)、index(a,b)、index(a) 八、优先考虑覆盖索引...:select name,phone from customer where id = '111'; 3、充分利用表上已经存在索引 避免使用双%号查询条件。

34620

MySQL高性能优化规范建议,速度收藏

, 通常将 1、2 字段建立联合索引效果更好•多表 join 关联列 ---- 5.如何选择索引列顺序 建立索引目的是:希望通过索引进行数据查找,减少随机 IO,增加查询性能 ,索引能过滤出越少数据...避免建立冗余索引和重复索引(增加了查询优化器生成执行计划时间) •重复索引示例:primary key(id)、index(id)、unique index(id)•冗余索引示例:index(a,b,...避免数据类型隐式转换 隐式转换会导致索引失效: select name,phone from customer where id = '111'; 3....充分利用表上已经存在索引 避免使用双%号查询条件。:a like '%123%',(如果无前置%,只有后置%,是可以用到列上索引) 一个 SQL 只能利用到复合索引一列进行范围查询。...推荐在程序获取一个随机值,然后从数据库获取数据方式。 13.

71820

Mysql高性能优化规范建议

, 通常将1、2字段建立联合索引效果更好 多表join关联列 ---- 如何选择索引列顺序 建立索引目的是:希望通过索引进行数据查找,减少随机IO,增加查询性能 ,索引能过滤出越少数据,则从磁盘读入数据也就越少...(这样可以比较少建立一些索引) ---- 避免建立冗余索引和重复索引(增加了查询优化器生成执行计划时间) 重复索引示例:primary key(id)、index(id)、unique index(...避免数据类型隐式转换 隐式转换会导致索引失效: select name,phone from customer where id = '111'; 3....充分利用表上已经存在索引 避免使用双%号查询条件。:a like '%123%',(如果无前置%,只有后置%,是可以用到列上索引) 一个SQL只能利用到复合索引一列进行范围查询。...推荐在程序获取一个随机值,然后从数据库获取数据方式。 13.

1.1K30

面试官:你对MySQL高性能优化有什么规范建议?

, 通常将1、2字段建立联合索引效果更好 多表join关联列 ---- 如何选择索引列顺序 建立索引目的是:希望通过索引进行数据查找,减少随机IO,增加查询性能 ,索引能过滤出越少数据,则从磁盘读入数据也就越少...(这样可以比较少建立一些索引) ---- 避免建立冗余索引和重复索引(增加了查询优化器生成执行计划时间) 重复索引示例:primary key(id)、index(id)、unique index(...避免数据类型隐式转换 隐式转换会导致索引失效: select name,phone from customer where id = '111'; 3....充分利用表上已经存在索引 避免使用双%号查询条件。:a like '%123%',(如果无前置%,只有后置%,是可以用到列上索引) 一个SQL只能利用到复合索引一列进行范围查询。...推荐在程序获取一个随机值,然后从数据库获取数据方式。 13.

47310

MySQL高性能优化规范建议,值得收藏

, 通常将 1、2 字段建立联合索引效果更好•多表 join 关联列 ---- 5.如何选择索引列顺序 建立索引目的是:希望通过索引进行数据查找,减少随机 IO,增加查询性能 ,索引能过滤出越少数据...避免建立冗余索引和重复索引(增加了查询优化器生成执行计划时间) •重复索引示例:primary key(id)、index(id)、unique index(id)•冗余索引示例:index(a,b,...避免数据类型隐式转换 隐式转换会导致索引失效: select name,phone from customer where id = '111'; 3....充分利用表上已经存在索引 避免使用双%号查询条件。:a like '%123%',(如果无前置%,只有后置%,是可以用到列上索引) 一个 SQL 只能利用到复合索引一列进行范围查询。...推荐在程序获取一个随机值,然后从数据库获取数据方式。 13.

1.1K41

关于Mysql高性能优化规范一点建议

, 通常将1、2字段建立联合索引效果更好 多表join关联列 ---- 如何选择索引列顺序 建立索引目的是:希望通过索引进行数据查找,减少随机IO,增加查询性能 ,索引能过滤出越少数据,则从磁盘读入数据也就越少...(这样可以比较少建立一些索引) ---- 避免建立冗余索引和重复索引(增加了查询优化器生成执行计划时间) 重复索引示例:primary key(id)、index(id)、unique index(...避免数据类型隐式转换 隐式转换会导致索引失效: select name,phone from customer where id = '111'; 3....充分利用表上已经存在索引 避免使用双%号查询条件。:a like '%123%',(如果无前置%,只有后置%,是可以用到列上索引) 一个SQL只能利用到复合索引一列进行范围查询。...推荐在程序获取一个随机值,然后从数据库获取数据方式。 13.

1K20
领券