精华内容
下载资源
问答
  • mysql一个表可以创建多个唯一索引

    千次阅读 2018-09-06 11:44:00
    如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个 唯一索引 。 转载于:https://my.oschina.net/zjllovecode/blog/1973479

    mysql一个表是可以有多个唯一索引的。

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

    转载于:https://my.oschina.net/zjllovecode/blog/1973479

    展开全文
  • 前言: 网上关于一张mysql最多可以创建多少个索引?基本就是两种答案,种是不限制,种是16列, 我认为16的由来应该网上传着传着给扭曲, 因为mysql的单个索引最多能包括16列,但是这个是一个索引包含几列的答案而不是...

    前言: 网上关于一张mysql表最多可以创建多少个索引?基本就是两种答案,一种是不限制,一种是16列, 我认为16的由来应该网上传着传着给扭曲, 因为mysql的单个索引最多能包括16列,但是这个是一个索引包含几列的答案而不是一张可以建多少个索引.真的是误导人啊! 为此我一顿好找终于在官网找到了权威答案, 现将mysql表的一些限制做一个总结, 希望能帮到对此有困惑的朋友们, 有用就赞下啦 ~_~

    因为mysql的一些限制跟具体存储引擎有关,为此以下只列出我们最常用的innoDB和myisam,其他存储引擎的具体限制可以去官网找.
    • innoDB: 最多创建1017列, 最多64个二级索引, 单个索引最多包含16列, 索引最大长度767字节(其实行格式为REDUNDANT,COMPACT最高为767字节,但行格式为DYNAMIC,COMPRESSED最高可达为3072字节), 行大小最大65536字节
    • mysiam: 最多4096列, 最多64个二级索引, 单个索引最多包含16列, 索引最大长度1000字节, 行大小最大65536字节
    以上都整理自mysql官方文档,有兴趣可以自己去看看

    来自我的博客:http://blog.nice100.net/mysql/14.html

    展开全文
  • 发现mysql一个表可以几个唯一索引

    千次阅读 2018-04-26 09:07:44
    mysql一个表可以有多个唯一索引。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。这么做的好处:一是简化了MySQL对这个索引的管理工作,...

    mysql一个表可以有多个唯一索引

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

    这么做的好处:

    一是简化了MySQL对这个索引的管理工作,这个索引也因此而变得更有效率。

    二是MySQL会在有新记录插入数据表时,自动检查新记录的这个字段的值是否已经在某个记录的这个字段里出现过了;如果是,MySQL将拒绝插入那条新记录。

    也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。

    展开全文
  • 可以创建个索引嘛? 可以创建个索引的。 需要开发人员根据实际的用途以及数据库中记录的情况,来进行判断。 通常来说,的索引越多,其查询的速度也就越快。但是,的insert/update速度则会降低。这主要是...

    一、可以创建多个索引嘛?

    可以创建多个索引的。
    需要开发人员根据实际的用途以及数据库中记录的情况,来进行判断。

    通常来说,表的索引越多,其查询的速度也就越快。但是,表的insert/update速度则会降低。这主要是因为,在更新记录的同时需要更新相关的索引信息。为此,到底在表中创建多少索引合适,就需要在这个更新速度与查询速度之间取得一个均衡点。

    如对于一些数据仓库数据库系统,其主要用来进行查询。相关的记录往往是在数据库初始化的时候倒入。此时,设置的索引多一点,可以提高数据库的查询性能。同时因为记录不怎么更新,所以索引比较多的情况下,也不会影响到更新的速度。即使在起初的时候需要导入大量的数据,此时也可以先将索引禁用掉。等到数据导入完毕后,再启用索引。可以通过这种方式来减少索引对数据更新的影响。

    如果那些表中经常需要更新记录,如一些事务型的应用系统,数据更新操作是家常便饭的事情。此时如果在一张表中建立过多的索引,则会影响到更新的速度。由于更新操作比较频繁,所以对其的负面影响,要比查询效率提升要大的多。此时就需要限制索引的数量,只在一些必要的字段上建立索引。

    二、创建索引

    1.ALTER TABLE

    ALTER TABLE用来创建普通索引、UNIQUE索引或PRIMARY KEY索引。

    ALTER TABLE table_name ADD INDEX index_name (column_list)

    ALTER TABLE table_name ADD UNIQUE (column_list)

    ALTER TABLE table_name ADD PRIMARY KEY (column_list)

    其中table_name是要增加索引的表名,column_list指出对哪些列进行索引,多列时各列之间用逗号分隔。索引名index_name可选,缺省时,MySQL将根据第一个索引列赋一个名称。另外,ALTER TABLE允许在单个语句中更改多个表,因此可以在同时创建多个索引。

    2.CREATE INDEX

    CREATE INDEX可对表增加普通索引或UNIQUE索引。

    CREATE INDEX index_name ON table_name (column_list)

    CREATE UNIQUE INDEX index_name ON table_name (column_list)

    table_name、index_name和column_list具有与ALTER TABLE语句中相同的含义,索引名不可选。另外,不能用CREATE INDEX语句创建PRIMARY KEY索引。

    三、索引类型

    在创建索引时,可以规定索引能否包含重复值。如果不包含,则索引应该创建为PRIMARY KEY或UNIQUE索引。对于单列惟一性索引,这保证单列不包含重复的值。对于多列惟一性索引,保证多个值的组合不重复。

    PRIMARY KEY索引和UNIQUE索引非常类似。
    事实上,PRIMARY KEY索引仅是一个具有名称PRIMARY的UNIQUE索引。这表示一个表只能包含一个PRIMARY KEY,因为一个表中不可能具有两个同名的索引。

    下面的SQL语句对students表在sid上添加PRIMARY KEY索引。
    ALTER TABLE students ADD PRIMARY KEY (sid)

    四、删除索引

    可利用ALTER TABLE或DROP INDEX语句来删除索引。类似于CREATE INDEX语句,DROP INDEX可以在ALTER TABLE内部作为一条语句处理,语法如下。

    DROP INDEX index_name ON talbe_name

    ALTER TABLE table_name DROP INDEX index_name

    ALTER TABLE table_name DROP PRIMARY KEY

    其中,前两条语句是等价的,删除掉table_name中的索引index_name。

    第3条语句只在删除PRIMARY KEY索引时使用,因为一个表只可能有一个PRIMARY KEY索引,因此不需要指定索引名。如果没有创建PRIMARY KEY索引,但表具有一个或多个UNIQUE索引,则MySQL将删除第一个UNIQUE索引。

    如果从表中删除了某列,则索引会受到影响。对于多列组合的索引,如果删除其中的某列,则该列也会从索引中删除。如果删除组成索引的所有列,则整个索引将被删除。

    五、单一索引和复合索引

    1.单一索引:
    单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上;

    2.复合索引:
    复合索引也叫组合索引,用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引)。

    复合索引在数据库操作期间所需的开销更小,可以代替多个单一索引;

    3.使用:

    创建复合索引 :
    CREATE INDEX columnId ON table1(col1,col2,col3) ;

    查询语句:
    select * from table1 where col1= A and col2= B and col3 = C
    这时候查询优化器,不在扫描表了,而是直接从索引中拿数据,因为索引中有这些数据,这叫覆盖式查询,这样的查询速度非常快;

    4.注意事项:

    (1)对于复合索引,在查询使用时,最好将条件顺序按找索引的顺序,这样效率最高;
    select * from table1 where col1=A AND col2=B AND col3=D
    如果使用
    where col2=B AND col1=A
    或者
    where col2=B
    将不会使用索引。

    (2)何时是用复合索引 根据where条件建索引是极其重要的一个原则; 注意不要过多用索引,否则对表更新的效率有很大的影响,因为在操作表的时候要化大量时间花在创建索引中

    (3)复合索引会替代单一索引么 如果索引满足窄索引的情况下可以建立复合索引,这样可以节约空间和时间

    (4)对一张表来说,如果有一个复合索引 on (col1,col2),就没有必要同时建立一个单索引 on col1;

    如果查询条件需要,可以在已有单索引 on col1的情况下,添加复合索引on (col1,col2),对于效率有一定的提高;

    同时建立多字段(包含5、6个字段)的复合索引没有特别多的好处,相对而言,建立多个窄字段(仅包含一个,或顶多2个字段)的索引可以达到更好的效率和灵活性。

    六、创建索引需要注意的问题

    1.创建索引
    对于查询占主要的应用来说,索引显得尤为重要。很多时候性能问题很简单的就是因为我们忘了添加索引而造成的,或者说没有添加更为有效的索引导致。如果不加

    索引的话,那么查找任何哪怕只是一条特定的数据都会进行一次全表扫描,如果一张表的数据量很大而符合条件的结果又很少,那么不加索引会引起致命的性能下降。
    但是也不是什么情况都非得建索引不可,比如性别可能就只有两个值,建索引不仅没什么优势,还会影响到更新速度,这被称为过度索引。

    2.复合索引
    比如有一条语句是这样的:select * from users where area=’beijing’ and age=22;

    如果我们是在area和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效

    率,但是如果在area、age两列上创建复合索引的话将带来更高的效率。如果我们创建了(area, age,salary)的复合索引,那么其实相当于创建了(area,age,salary)、(area,age)、(area)三个索引,这被称为最佳左前缀特性。
    因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边,依次递减。

    3.使用短索引
    对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的 列,如果在前10 个或20 个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。

    4.排序的索引问题
    mysql查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。

    5.不使用NOT IN和操作
    NOT IN和操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替,id3则可使用id>3 or id

    七、索引失效的情况

    1.当语句中有or时:select * from user where name = ‘aaa’ or age = 18;
    2.当语句索引like带%时:select * from user where name like %’aaa’;
    3.如果列类型是字符串,一定要将数据用引号引起来:
    Select * from user where name = 123;
    4.在索引上进行操作时:比如age为索引,select * from user where age – 1 > 11;
    5.Mysql在使用全表扫描比使用索引扫描快时,则不会走索引
    6.只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。
    7.条件中包含&lt、&gt(<>)

    八、索引的数据结构为什么是B+数而不是hashmap或者B树?

    1.B+树的磁盘读写代价更低
    B+树的内部节点并没有指向关键字具体信息的指针,因此其内部节点相对B树更小,如果把所有同一内部节点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多,一次性读入内存的需要查找的关键字也就越多,相对IO读写次数就降低了。

    B+树的查询效率更加稳定
    由于非叶子节点只存索引信息,而没有真正的数据信息,所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。

    B+树更加适合在区间查询的情况
    由于B+树的数据都存储在叶子结点中,非叶子结点均为索引,只需要扫一遍叶子结点即可得到所有数据信息,但是B树因为其非叶子结点同样存储着数据,我们要找到具体的数据,需要进行一次中序遍历按序来扫,所以B树更加适合在区间查询的情况,通常B+树用于数据库索引。

    展开全文
  • 1)创建索引需要几个G的磁盘空间   2)创建索引需要排序,使用pga_aggregate_target,要把这个值从200M加大到2G   3)如果内存不够,需要temp空间,把temp空间加大到8G。itpub上有一个帖子说过,15...
  • SOLR对多(关联)表创建索引

    万次阅读 2016-09-30 16:56:29
     首先在数据库创建一张,本来有一个tuser了,我又创建一个role,就两三个字段,没什么特殊的,然后在里面随便添加条数据即可,看一下数据库: 1.2data-config.xml  数据库创建完成之后就是...
  • MySQL索引创建与使用

    万次阅读 多人点赞 2018-08-06 18:49:59
    声明:本人主要简单示例MySQL中的单列索引、组合索引创建与使用。 索引创建: 建表时创建: CREATE TABLE 表名( 字段名 数据类型 [完整性约束条件], ……, [UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY ...
  • 利用MySQL Workbench管理索引(1)利用MySQL Workbench修改索引可以修改索引的名字、类型、索引引用字段和索引参数等。(2)利用MySQL Workbench删除索引。 1.利用MySQL Workbench创建索引 (1)启动MySQL Workbe....
  • mysql最多可以几个索引

    千次阅读 2017-05-08 16:50:59
    mysql中提到,一个表最多16个索引,最大索引长度256字节.
  • 千万级别数据表创建索引

    万次阅读 2017-09-25 12:52:10
    业务背景最近一个开发维护的公众号管理系统用户(user_info)数据已经达到15,000k了,而此时有一个业务场景需要将公众号的用户信息重新同步一次,且后台原有过针对单个公众号的用户同步,但是已经非常难以使用,...
  • Oracle分区及分区索引创建

    万次阅读 多人点赞 2018-07-08 11:21:22
    关于分区和分区索引(About Partitioned Tables and Indexes)对于10gR2而言,基本上可以分成类:• Range(范围)分区• Hash(哈希)分区• List(列表)分区• 以及组合分区:Range-Hash,Range-List。 对于而...
  • 1、什么是corecore是solr的一个索引库,可以理解为一个数据库,core可以根据需要,创建多个。2、创建core例如,创建一个core,名字叫mycore,就可以用一下命令: E:\solr-6.6.0\solr-6.6.0\bin>solr.cmd create -c ...
  • Oracle创建索引要做到三适当

    千次阅读 2014-10-24 10:22:20
    在Oracle数据库中,创建索引虽然比较简单。但是要合理的创建索引则比较困难了。笔者认为,在创建索引时要做到三适当,即在适当的上、适当的列上创建适当数量的索引。... 虽然给表创建索引可以提高查
  • 单列索引和联合索引的区别详解

    万次阅读 多人点赞 2018-06-24 17:40:58
    那么当查询条件为2个及以上时,我们是创建多个单列索引还是创建一个联合索引好呢?他们之间的区别是什么?哪个效率高呢?我在这里详细测试分析下。 一、联合索引测试 注:Mysql版本为 5.7.20 创建测试(记录...
  • 当然,如果需要创建索引很小,或者是需要重组的索引都很小,创建与重组过程在秒之内,这些都可以直接做而不需要讨论。实际情况是,业务很繁重以及索引都很大。这些情况下我们需要注意些什么呢?...
  • 数据库创建索引种方法

    万次阅读 多人点赞 2018-11-09 10:46:26
    1、普通索引  CREATE INDEX indexName ON mytable(username(length)... 创建表的时候直接指定:  CREATE TABLE mytable(  ID INT NOT NULL,   username VARCHAR(16) NOT NULL,   INDEX [indexName] (...
  • 索引创建方式

    千次阅读 2018-07-03 19:34:22
    oracle的索引分为5种:唯一索引,组合索引,反向键索引,位图索引,基于函数的索引创建索引:CREATE [unique] INDEX index_name ON table (column)unique --唯一索引index_name --索引名称table --表名column (列.....
  • 、MySql官网文档解释 在**mysql5.***中描述如下 Different limits related to tables and indexes. For example, the maximum number of ordered indexes in the cluster is determined by MaxNoOfOrderedIndexes...
  • 性能原因, 需要对一个表创建索引, 在索引维护界面竟然没有找到添加的按钮, 很不符合SAP的操作风格呀, 很少在SAP操作中使用右键的, 这里竟然只能用右键. 如下二图: SE11 
  • 2)、alter table 数据库 add index 索引名称(数据库表字段名称) 2、索引类型: 1)、PRIMARY KEY(主键索引) ALTER TABLE table_name ADD PRIMARY KEY ( column ) 2)、UNIQUE(唯一索引) ALTER TABLE table...
  • MySQL的索引类型及创建索引

    万次阅读 2019-03-05 14:04:27
    MySQL目前主要有以下索引类型: 1.普通索引 2.唯一索引 3.主键索引 4.组合索引 5.全文索引 二、语法 CREATE TABLE table_name[col_name data type] [unique|fulltext][index|key][index_name](col_name...
  • 基于lucene的案例开发:创建索引

    千次阅读 2015-01-19 14:49:24
    通过简单的事例,介绍了如何创建Lucene索引,同时还介绍了在索引创建过程中的几个核心类:IndexWriter、Directory、Analyzer、Document、Field。
  • 创建索引原则及SQL添加索引

    万次阅读 2018-08-14 10:40:07
    、数据库建立索引的原则  1.确定针对该的操作是大量的查询操作还是大量的增删改操作。  2.尝试建立索引来帮助特定的查询。检查自己的sql语句,为那些频繁在where子句中出现的字段建立索引。  3.尝试建立...
  • MySQL索引创建及使用

    万次阅读 多人点赞 2019-03-12 17:56:59
    背景 最近在深化学习数据库相关知识,借此机会总结记录一番,本来想自己总结概括一下,但是看到...关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是辆兰博基尼的话,那么没有设计和使用索引的MySQL...
  • 在Oracle数据库中,创建索引虽然比较简单。但是要合理的创建索引则比较困难了。笔者认为,在创建索引时要做到三适当,即在适当的上、适当的列上创建适当数量的索引。... 虽然给表创建索引可以提高
  • 一个表只能有一个主键,但可以有多个候选索引。主键常常与外键构成参照完整性约束,防止出现数据不一致。主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引...
  • 几乎所有的小伙伴都可以随口说句关于创建索引的优缺点,也知道什么时候创建索引能够提高我们的查询性能,什么时候索引会更新,但是你有没有注意到,即使你设置了索引,有些时候索引他是不会生效的!这不仅考察了...
  • MySQL创建数据索引

    千次阅读 2011-08-10 17:10:16
    show databases; //查看数据库 create database test; //创建数据库 use test; //选择数据库 \s //查看数据库状态 ? create table; //创建表的帮助 show

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 494,613
精华内容 197,845
关键字:

一个表可以创建几个索引