【关于复合主键查询时使用索引研究】教程文章相关的互联网学习教程文章

MySQL中主键与索引关系

关系数据库依赖于主键,它是数据库物理模式的基石。主键在物理层面上只有两个用途:惟一地标识一行。作为一个可以被外键有效引用的对象。索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。下面是主键和索引的一些区别与联系。1. 主键一定是唯一性索引,唯一性索引并不一定就是主键。所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有...

MySQL之-uuid做主键与int做主键的性能实测对比详解

偶然的机会,得知mysql主键的类型采用 varchar 存UUID 的查询性能没有int型做主键好。网上查询大量资料,都是停留在理论上的,因此,自己写了代码进行实测,以下结果仅供参考,不具备权威性。三个表的字段,除了主键ID 分别采用varchar,bigint 和自动增长bigint不同外,其他三个字段都为 varchar 36位数据库:mysql5.5表类型:InnoDB数据量:100W条第一种情况:主键采用uuid 32位。运行查询语句1:SELECT COUNT(id) FROM test_var...

MySQL使用自增ID主键和UUID作为主键的优劣比较详细过程(从百万到千万表记录测试)

测试缘由 一个开发同事做了一个框架,里面主键是uuid,我跟他建议说mysql不要用uuid用自增主键,自增主键效率高,他说不一定高,我说innodb的索引特性导致了自增id做主键是效率最好的,为了拿实际的案例来说服他,所以准备做一个详细的测试。 作为互联网公司,一定有用户表,而且用户表UC_USER基本会有百万记录,所以在这个表基础上准测试数据来进行测试。 测试过程是目前我想到的多方位的常用的几种类型的sql进行测试,...

MySQL使用自增ID主键和UUID作为主键的优劣比较详细过程(500W单表)

测试缘由 一个开发同事做了一个框架,里面主键是uuid,我跟他建议说mysql不要用uuid用自增主键,自增主键效率高,他说不一定高,我说innodb的索引特性导致了自增id做主键是效率最好的,为了说服他,所以准备做一个详细的测试。 作为互联网公司,一定有用户表,而且用户表UC_USER基本会有百万记录,所以在这个表基础上准测试数据来进行测试。 大概环境是:Centos6.5、MySQL5.6.12 1、准备表以及数据UC_USER,自增ID为主键:CRE...

mysql中的主键递增

CREATE TABLE customers ( cust_id int NOT NULL AUTO_INCREMENT, cust_name char(50) NOT NULL , PRIMARY KEY (cust_id) ) ENGINE=InnoDB;第一次执行时:insert into customers values(1,aaa);第二次执行时:insert into customers values(null,bbb);第二条记录的主键为2插入第三条记录:insert into customers2(cust_name) values(ccc);在使用时,最好使用第三条记录的方式,防止后期表列增加时,插入数据的sql语句报错。插入第四...

MysqlInnoDB为什么要添加跟业务无关的自增主键【图】

在Mysql表设计中,通常会使用一个与业务无关的自增列做为主键。这是因为Mysql默认使用B-Tree索引,你可以简单理解为“排好序的快速查找结构”。如下是一个B-Tree的结构图,2层B+树,每个页面的扇出为4;并有1到6五条记录;上层记录保存每个页面的最小值;每个页面通过双向链表链接起来的;当你插入记录7时,就会发生页面分裂:如上可见分裂产生了记录移动,但是优化后的分裂操作无需记录移动:在InnoDB的实现中,为每个索引页面维护...

mysql主键与索引的联系与区别

关系数据库依赖于主键,它是数据库物理模式的基石。主键在物理层面上只有两个用途:惟一地标识一行。作为一个可以被外键有效引用的对象。索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。下面是主键和索引的一些区别与联系。1. 主键一定是唯一性索引,唯一性索引并不一定就是主键。所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有...

pt-online-schema-change进行MySQL表的主键变更

业务运行一段时间,发现原来的主键设置并不合理,这个时候,想变更主键。这种需求在实际生产中还是蛮多的。下面,看看pt-online-schema-change解决这类问题的处理方式。 首先,创建一张测试表create table t2(c1 int primary key, c2 int); 构造测试数据delimiter // create procedure p1() begindeclare v1 int default 1;set autocommit=0;while v1 <=100000 doinsert into test.t2(c1,c2) values(v1,v1+100);set v1=v1+1;if v1%...

sqlserver数据库主键的生成方式小结(sqlserver,mysql)

严格讲这三种产生方式有一定的交叉点,其定位方式将在下面进行讲解主键的生成方式主要有三种: 一. 数据库自动生成 二. GUID 三. 开发创建 严格讲这三种产生方式有一定的交叉点,其定位方式将在下面进行讲解。 第一种方式,主要将其定位在自增长的标识种子:可以设置起始数值,及增长步长。其优点在于使用时完全将并发任务交于数据库引擎管理,你不用担心存在多用户使用的时候会产生两个相同的ID的情况。其缺点也在于此,多数的数据...

sql语句查询数据库中的表名/列名/主键/自动增长值实例

sql语句查询数据库中的表名/列名/主键/自动增长值实例,需要的朋友可以参考下sql语句查询数据库中的表名/列名/主键/自动增长值 ----查询数据库中用户创建的表 ----jsj01 为数据库名 select name tablename from jsj01..sysobjects where type='U' and name not in ('dtproperties') --查询表里的字段信息 ---docs为表名 ---- select * from syscolumns where id = object_id('docs') ----查询数据库中所有类型 ----select name,xty...

sql语句返回主键SCOPE_IDENTITY()

sql语句返回主键SCOPE_IDENTITY()在sql语句后使用 SCOPE_IDENTITY() 当然您也可以使用 SELECT @@IDENTITY 但是使用 SELECT @@IDENTITY是去全局最新. 有可能取得值不正确. 示例: 代码如下:insert into dbo.SNS_BlogData(userName) values('jiangyun') ; SELECT SCOPE_IDENTITY() 获取SQL-SERVER数据库insert into操作的主键返回值,SCOPE_IDENTITY 插入一条记录后想要立刻获取其数据表中的主键返回值。这个主键是自动生成的,其实实...

MySQL创建主键,外键和复合主键的语句

MySQL 创建主键,外键和复合主键的方法,需要的朋友可以参考下。1.创建主键语法 ALTER TABLE table_name ADD CONSTRAINT pk_name PRIMARY KEY(列名); 2.创建外键语法 ALTER TABLE news_info[子表名] ADD CONSTRAINT FK_news_info_news_type[约束名] FOREIGN KEY (info_id)[子表列] REFERENCES news_type[主表名] (id)[主表列] ; 3.使用组合主键 如果一列不能唯一区分一个表里的记录时,可以考虑多个列组合起来达到区分表记录的唯一...

MySQL里CreateIndex能否创建主键PrimaryKey

MySQL里Create Index 能否创建主键 Primary KeyMySQL里Create Index 能否创建主键 Primary Key? 答案: 不能,必须用 Alter table 创建。 MySQL一个索引列最大允许的有效长度,不是列的所有数据都被索引的MyISAM 是 1000字节 InnoDB 是 767 字节 注意这里是字节。

Oracle之序列(主键自增)

在Oracle中完成自动增长的功能,则只能依靠序列完成,所有的自动增长操作,需要用户收工完成处理。 序列的创建格式: CREATE SEQUENCE sequence [INCREMENT BY n][STARTWITH n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE|NOCYCLE}] [在Oracle中完成自动增长的功能,则只能依靠序列完成,所有的自动增长操作,需要用户收工完成处理。 序列的创建格式: CREATE SEQUENCE sequence [INCREMENT BY n][STARTWI...

Oracle创建主键自增表(sql语句实现)及触发器应用

主键自增在插入数据的时候是很实用的,可以获取并操作返回的插入记录的ID,接下来介绍Oracle如何创建主键自增表,感兴趣的你可以了解下,就当是巩固知识,希望此文对你有所帮助1、创建表 代码如下:createtableTest_Increase( useridnumber(10)NOTNULLprimarykey,/*主键,自动增加*/ usernamevarchar2(20) ); 2、创建自动增长序列 代码如下:CREATESEQUENCETestIncrease_Sequence INCREMENTBY1--每次加几个 STARTWITH1--从1开始计数...