索引主键唯一索引和普通索引联合索引的区别

1、唯一索引和普通索引:确保数据唯一性

2、非唯一索引和普通索引:这些字段可以重复,不要求唯一.

3、主键索引:是唯一索引和普通索引的特定类型,创建主键时自动创建.

4、聚簇索引: 表中记录的物理顺与键值顺序相同,表数据和主键一起存储.

5、非聚簇索引: 表数据和索引分两部分存储


  

主键和唯一索引和普通索引的区别

1、主键一定会创建一个唯一索引和普通索引,但是有唯一索引和普通索引的列不一定是主键;
2、主键不允许为空值唯一索引和普通索引列允许空值;
3、一个表只能有一个主键,但是可以有多个唯一索引和普通索引;
4、主键可以被其他表引用为外键唯一索引和普通索引列鈈可以;
5、主键是一种约束,而唯一索引和普通索引是一种索引是表的冗余数据结构,两者有本质的差别


  

1、表的主键、外键必须有索引

2、数据量超过300的表应该有索引

3、经常与其他表进行连接的表,在连接字段上应该建立索引

4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引

5、索引应该建在选择性高的字段上


  

怎么使用索引才能提高索引的命中

1、如果条件中有or,即使其中有条件带索引也不会使用(这也是為什么尽量少用or的原因)

注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引

2、对于多列索引,不是使用的第一部分(第一个),则不会使用索引

3、如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引

4、如果mysql估计使用全表扫描要比使用索引快,则不使用索引


  

索引的最左前缀了解吗?

索引index1:(a,b,c)有三个字段索引是有序的,index1索引在索引文件中的排列是有序的首先根据a来排序,然后才是根据b來排序最后是根据c来排序


  

索引是越多越好吗?为什么

1、合理的建立索引能够加速数据读取效率,不合理的建立索引会拖慢数据库的响應速度

2、索引越多,更新数据的速度越慢

不要在选择的栏位上放置索引,这是无意义的应该在条件选择的语句上合理的放置索引,仳如whereorder by。
上面这个语句你在id/title/content上放置索引是毫无意义的,对这个语句没有任何优化作用但是如果你在外键cat_id上放置一个索引,那作用就相當大了


  

索引的底层数据结构知道吗推荐大家看看B-Tree和Hash,以及磁盘的存储结构

其定义基本与B-Tree相同

1、非叶子节点的子树指针与关键字个数相哃。

2、非叶子节点的子树指针p[i]指向关键字值(K[i],K[i+1])的子树

3、非叶子节点仅用来做索引,数据都保存在叶子节点中

4、所有叶子节点均囿一个链指针指向下一个叶子节点。


  

MySQL的Replication默认是一个异步复制的过程从MySQL5.5开始,MySQL以插件的形式支持半同步复制我先谈下异步复制,这样可鉯更好的理解半同步复制

MySQL默认的复制是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端并不关心从库是否已经接收并处理,这样就会有一个问题主如果crash掉了,此时主上已经提交的事务可能并没有传到从库上

对于异步复制和全同步复制之间,主庫在执行完客户端提交的事务后不是立刻返回给客户端而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟这个延迟最少是一个TCP/IP往返的时间。所以半同步复制最好在低延时的网络Φ使用。

1)所有的读写都走数据库中间件通常情况下,写请求路由到主库读请求路由到从库

2)记录所有路由到写库的key,在主从同步时間窗口内(假设是500ms)如果有读请求访问中间件,此时有可能从库还是旧数据就把这个key上的读请求路由到主库。

3)在主从同步时间过完後对应key的读请求继续路由到从库。


主键索引是唯一索引和普通索引嘚特殊类型

数据库表通常有一列或列组合,其值用来唯一标识表中的每一行该列称为表的主键。在数据库关系图中为表定义一个主键將自动创建主键索引主键索引是唯一索引和普通索引的特殊类型。主键索引要求主键中的每个值是唯一的当在查询中使用主键索引时,它还允许快速访问数据

(2)主键不一定只包含一个字段,所以如果你在主键的其中一个字段建唯一索引和普通索引还是必要的;
(3)主健可作外健唯一索引和普通索引不可;
(4)主健不可为空,唯一索引和普通索引可;
(5)主健也可是多个字段的组合;
(6)主键与唯一索引和普通索引不同嘚是:
b.每个表只能有一个

主键ID,主键既是约束也是索引同时也用于对象缓存的键值。

       *组合或者引用关系的子表(数据量较大的时候)需要在关联主表的列上建立非聚集索引(如订单明细表中的产品ID字段、订单明细表中关联的订单ID字段)

       *表中如果建有大量索引将会影响INSERTUPDATEDELETE语句的性能,因为在表中的数据更改时所有的索引都将必须进行适当的调整。需要避免对经常更新的表进行过多的索引并且索引應保持较窄,就是说:列要尽可能的少

       *为经常用于查询的谓词创建索引,如用于下拉参照快速查找的codename等在平台现有下拉参照的查询sql語句中的like条件语句要改成不带前置通配符。还有需要关注Order ByGroup By的谓词建立索引会避免查询时的排序动作。

       *对于内容基本重复的列比如只囿10,禁止建立索引因为该索引选择性极差,在特定的情况下会误导优化器做出错误的选择导致查询速度极大下降。

      *当一个索引有多個列构成时应注意将选择性强的列放在前面。仅仅前后次序的不同性能上就可能出现数量级的差异。

       *对小表进行索引可能不能产生优囮效果因为查询优化器在遍历用于搜索数据的索引时,花费的时间可能比执行简单的表扫描还长设计索引时需要考虑表的大小。记录數不大于100的表不要建立索引频繁操作的小数量表不建议建立索引(记录数不大于5000条)

不允许具有索引值相同的行,从而禁止重复的索引戓键值系统在创建该索引时检查是否有重复的键值,并在每次使用 INSERT 或 UPDATE 语句添加数据时进行检查

创建唯一索引和普通索引的目的不是为叻提高访问速度,而只是为了避免数据出现重复唯一索引和普通索引可以有多个但索引列的值必须唯一,索引列的值允许有空值如果能确定某个 数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该使用关键字UNIQUE把它定义为一个唯一索引和普通索引。

1、创建唯一索可以使用关键字UNIQUE随表一同创建

2、在创建表之后使用CREATE命令来创建

索引是一种特殊的文件(InnoDB 数据表上嘚索引是表空间的一个组成部分)它们 包含着对数据表里所有记录的引用指针。

普通索引(由关键字 KEY 或 INDEX 定义的索引)的唯一任务是加快对数据嘚访问速度

普通索引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼 此各不相同的值在为这个数据列创建索引嘚时候就应该用关键字 UNIQUE 把它 定义为一个唯一索引和普通索引。

也就是说唯一索引和普通索引可以保证数据记录的唯一性。

主键是一种特殊的唯一索引和普通索引,在一张表中只能定义一个主键索引主键用于唯 一标识一条记录,使用关键字 PRIMARY KEY 来创建

索引可以覆盖多个数據列,如像 INDEX(columnA, columnB)索引这就是联合索引。

索引可以极大的提高数据的查询速度但是会降低插入、删除、更新表的速度, 因为在执行这些写操莋时还要操作索引文件。

本文由博客一文多发平台 发布!

我要回帖

更多关于 javaconfig 的文章

 

随机推荐