前言 在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处?关注公众号:程序员追风,回复012获取一套500多页PDF总结的MySQL学习笔记. 关于MySQL的知识点总结了一个思维导图分享给大家 一.mysql和程序实例 1.1.要说明这个问题,我们首先来建立三张表 分别是user_auto_key,u…
这里使用触发程序实现此功能. 触发程序语法如下: Create trigger <tri_name> {before|after} {insert|update|delete} On <tab_name> For each row <触发程序SQL语句> 核心代码: use t14test show tables drop table if exists uuidTest create table uuidTest( testId VARCHAR() not NULL…
分布式数据库当然也有主键的需求,但是为什么不直接使用uuid作为主键呢?作为曾经被这个问题困惑过的人,试着回答一下 1. UUID生成速率低下 Java的UUID依赖于SecureRandom.nextBytes方法,而SecureRandom又依赖于操作系统提供的随机数源, 在Linux系统下,它的默认依赖是/dev/random,而这个源是阻塞的. 最可怕的是,这个nextBytes方法还是一个synchronized方法,也就是说,如果多线程调用UUID,生成速率不升反降. 测试结果:在一…
测试缘由 一个开发同事做了一个框架,里面主键是uuid,我跟他建议说mysql不要用uuid用自增主键,自增主键效率高,他说不一定高,我说innodb的索引特性导致了自增id做主键是效率最好的,为了拿实际的案例来说服他,所以准备做一个详细的测试.  作为互联网公司,一定有用户表,而且用户表UC_USER基本会有百万记录,所以在这个表基础上准测试数据来进行测试.           测试过程是目前我想到的多方位的常用的几种类型的sql进行测试,当然可能不太完善,欢迎大家留言提出更加完善的测试方案或…
  主键类型 SQL语句 运行时间 (秒)   (1)模糊范围查询1000条数据,自增ID性能要好于UUID 自增ID SELECT SQL_NO_CACHE t.* FROM test.`UC_USER` t WHERE t.`MOBILE` LIKE '147%' LIMIT 1000; 2.398 UUID SELECT SQL_NO_CACHE t.* FROM test.`UC_USER_PK_VARCHAR_1` t WHERE t.`MOBILE` LIKE '147%' LIMI…
>>> import uuidprint uuid.uuid3(uuid.uuid1(), 'python.org') >>> # make a UUID based on the host ID and current time >>> uuid.uuid1() UUID('a8098c1a-f86e-11da-bd1a-00112444be1e') >>> # make a UUID using an MD5 hash of a…
前言:在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处?本篇博客我们就来分析这个问题,探讨一下内部的原因. 本篇博客的目录 一:mysql程序实例 二:使用uuid和自增id的索引结构对比 三:总结 一:mysql和程序实例 1.1:要说明这个问题,我们首先来建立三张表,分别是user_auto_key,use…
日期: 2014年5月23日 博客: 铁锚 最近在查看MariaDB主从复制服务器 Master 的错误日志时看到很多条警告信息,都是提示 UUID()函数不安全,可能 Slave 产生的值和 Master不一致, 警告信息大致如下: 140522 15:11:10 [Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Stateme…
mysql中id一般都设为uuid,除了我们在后台用到的uuid利用jpa注解来生成外,其实在mysql中直接也可以生成 直接上代码: 1.mysql中直接使用uuid()函数,可以生成一个随机的uuid 2.正常的uuid是36位长度的,例如:d48644cc-2c7a-4714-9900-18ab99e80b03,其中有4个字符是”-“,在mysql中可以使用replace()函数来替换”-“ UPDATE bill_annex set id = REPLACE(UUID(),"-"…
原文出处:https://www.codeproject.com/articles/388157/guids-as-fast-primary-keys-under-multiple-database ,避免今后忘记了再去阅读原英文.[]是感觉理解有问题的地方 正确的使用有序GUID在大部分数据库中可以获得和 整型作为主键 时相媲美的性能. 介绍 这篇文章概述了一种方法去规避 当使用GUID作为主键/聚焦索引时一些常见的弊端,借鉴了 Jimmy Nilsson 的文章 GUID作为主键的成本 .尽…
概念: 主键(primary key) 能够唯一标识表中某一行的属性或属性组.一个表只能有一个主键,但可以有多个候选索引.主键常常与外键构成参照完整性约束,防止出现数据不一致.主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引. 外键(foreign key) 是用于建立和加强两个表数据之间的链接的一列或多列.外键约束主要用来维护两个表之间数据的一致性.简言之,表的外键就是另一表的主键,外键将两表联系起来.一般情况下,要删除一张表中的主键必须首…
本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的.所以说,如果谈到了外键,一定是至少涉及到两张表.例如下面这两张表: 上面有两张表:部门表(dept).员工表(emp).Id=Dept_id,而Dept_id就是员工表中的外键:因为…
(2.10)Mysql之SQL基础——约束及主键重复处理 关键词:mysql约束,批量插入数据主键冲突 [1]查看索引: show index from table_name; [2]查看有约束的列:select * from information_schema.key_column_usage where table_schema= 'db_name' and table_name = 'table_name'; [3]查看有约束的表及表约束类型:select * from informat…
1.从业务上来说 在设计数据库时不需要费尽心思去考虑设置哪个字段为主键.然后是这些字段只是理论上是唯一的,例如使用图书编号为主键,这个图书编号只是理论上来说是唯一的,但实践中可能会出现重复的 情况.所以还是设置一个与业务无关的自增ID作为主键,然后增加一个图书编号的唯一性约束. 2.从技术上来说 如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页. 总的来说就是可以提高查询和插入的性能. 对InnoDB来说 1: 主键索引既存储…
MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址.下图是MyISAM索引的原理图: 这里设表一共有三列,假设我们以Col1为主键,则上图是一个MyISAM表的主索引(Primary key)示意.可以看出MyISAM的索引文件仅仅保存数据记录的地址.在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复.如果我们在Col2上建立一个辅助索引,则此索引的结构如下图所示:  …
首先还是给出我见过的一些延迟可能: 大事物延迟 延迟略为2*执行时间 状态为:reading event from the relay log 大表DDL延迟 延迟略为1*执行时间 状态为:altering table 长期未提交的事物延迟,会造成延迟的瞬时增加 表上没有主键或者唯一键 状态为:system lock 或者 reading event from the relay log innodb层锁造成延迟 状态为:system lock 或者 reading event from the…
上期:[MySQL]从入门到掌握3-WorkBench 第一章:主键 在实际开发中,我们不会使用用户名字当作主键.   因为当我们用数据库记录学生信息的时候,学生有可能重名! 我们一般会使用是个int数字当主键,好处在于节约性能等等. 现在我们修改一下: id作为主键,并勾选上PK NN AI AI,Auto Increment,自动增加.   意思是每当新增一条数据(一个新玩家注册),id会自动分配,往上增加1. Apply,然后再次查询表格. id这一栏由于勾选上了AI,所以 不需要手动填写…
mysql数据库表的自增主键ID乱了,需要重新排序. 原理:删除原有的自增ID,重新建立新的自增ID. 1.删除原有主键: ALTER TABLE `table_name` DROP `id`; 2.添加新主键字段: ) NOT NULL FIRST; 3.设置新主键: ) NOT NULL AUTO_INCREMENT,ADD PRIMARY KEY(id);…
文章出处:http://inter12.iteye.com/blog/1430144 MYSQL的全表扫描,主键索引(聚集索引.第一索引),非主键索引(非聚集索引.第二索引),覆盖索引四种不同查询的分析 1.前置条件: 本次是基于小数据量,且数据块在一个页中的最理想情况进行分析,可能无具体的实际意义,但是可以借鉴到各种复杂条件下,因为原理是相同的,知小见大,见微知著! 打开语句分析并确认是否已经打开 Java代码   mysql> set profiling=1; Query OK, 0 row…
 背景 前段时间学习<Microsoft SQL Server 2008技术内幕:T-SQL查询>时,看到里面关于无序GUID作为主键与聚集索引的建议,无序GUID作为主键以及作为聚集索引所带来的问题包括: 空间的浪费以及由此带来的读写效率的下降. 更主要的,存储的碎片化(fragmentation)以及由此带来的读写效率严重下降. 所以,尽量避免用GUID(无序或有序)做主键,不要用无序GUID做聚集索引.<摘自博友博客> 想到在工作中存在一个视图转成物理表的时候使用到了此种场景…
mysql数据库单表只有一个主键自增id字段,ibatis实现id自增 <insert id="autoid">        insert into user_id values(null)        <selectKey resultClass="int">SELECT @@IDENTITY As id</selectKey>    </insert>…
 背景 前段时间学习<Microsoft SQL Server 2008技术内幕:T-SQL查询>时,看到里面关于无序GUID作为主键与聚集索引的建议,无序GUID作为主键以及作为聚集索引所带来的问题包括: 空间的浪费以及由此带来的读写效率的下降. 更主要的,存储的碎片化(fragmentation)以及由此带来的读写效率严重下降. 所以,尽量避免用GUID(无序或有序)做主键,不要用无序GUID做聚集索引.<摘自博友博客> 想到在工作中存在一个视图转成物理表的时候使用到了此种场景…
在数据库开发中,很多时候建一个表的时候会使用一个数字类型来作为主键,使用自增长类型自然会更方便,只是本人从来不喜欢有内容不在自己掌控之中,况且自增长类型在进行数据库复制时会比较麻烦.所以本人一直使用自己生成最大数字来保存主键.只是多任务同时写入数据库时,就偶尔会有主键冲突的情况出现了.因为得到最大数值时的查询语句如果同时进行就会出现相同的数字ID了.考虑到如果进行锁表的代价比较大,所以经过考虑,还是在一个表中保存最大ID这种速度快并且锁定的代价很小.本人使用SqlServer2008R2数据库,…
Mysql数据库表的自增主键ID号乱了,需要重新排列. 原理:删除原有的自增ID,重新建立新的自增ID. 1,删除原有主键:ALTER TABLE `table_name` DROP `id`; 2,添加新主键字段:ALTER TABLE `table_name` ADD `id` MEDIUMINT( 8 ) NOT NULL FIRST; 3,设置新主键:ALTER TABLE `table_name` MODIFY COLUMN `id` MEDIUMINT( 8 ) NOT NULL A…
MySQL基础day03_存储引擎和外键-MySQL 5.6 外键的条件: 1,表的存储引擎为innodb存储引擎 2,表中外键字段的类型要与参考表的字段类型一致 3,外键字段要是索引类型中的一种 MySQL数据库的存储引擎 存储引擎:是mysql结构中的组成部分 mysql体系结构: 由8部分组成:连接池.Sql接口.分析器.优化器.缓存和缓冲.存储引擎.管理工具.物理存储设备 1.客户端:mysql 2.连接器: NativeC API 本地C语言接口.JDBCJAVA的数据库连接器.ODB…
原文链接:https://blog.csdn.net/RuobaiMEN/article/details/79794199 MySQL数据库表中有自增主键ID,当用SQL插入语句中插入语句带有ID列值记录的时候: 如果指定了该列的值,则新插入的值不能和已有的值重复,而且必须大于其中最大的一个值: 也可以不指定该列的值,只将其他列的值插入,让ID还是按照MySQL自增自己填: 具体: 1.创建数据库 create table if not exists userInfo ( id int PRIM…
0.目录 2.setup(1) 安装步骤,可以顺带安装mysql administrator和mysql query browser(2) 安装完毕,修改 my.ini(3) 重启 mysql 服务:(4) cmd 确认可用:(5) 安装 MySQLdb(6) 脚本内部会先对 execute 的unicode query 参数进行编码,可以手动加一句 print repr(query) 方便调试,懒得打monkey_patch的话... 3.推荐使用姿势(1)连接:(2)创建数据库:不可省略CO…
前言: 1.对于mysql,不推荐使用子查询和join是因为本身join的效率就是硬伤,一旦数据量很大效率就很难保证,强烈推荐分别根据索引单表取数据,然后在程序里面做join,merge数据. 2.子查询就更别用了,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程. 3.如果是JOIN的话,它是走嵌套查询的.小表驱动大表,且通过索引字段进行关联.如果表记录比较少的话,还是OK的.大的话业务逻辑中可…
MySQL的uuid这个函数.简要介绍一下. 用法 简单看到,这个值,每次执行都是不同的. 生成规则 第1 2 3 段是与时间有关的. time_low.time_mid.time_high_and_version转成16进制后分别对应第1 2 3段.这个时间是从1582-10-15 00:00:00.00到当前时间的100ns值.(实际上系统只能取到精确us,再乘以10).所以你短时间连续执行的话,比较可能只有第一个值在改,实际上1 2 3都可能会改变. 第4段是你启动这个MySQL后第一次执…
update base_problem set uuid=replace(uuid(),'-',''); update base_problem set uuid = UUID() where uuid =uuid; update base_problem set uuid = REPLACE(uuid,'-','');…