精华内容
下载资源
问答
  • 多个字段建立索引
    千次阅读
    2020-07-26 17:58:25

    做为一个开发者,关于MySQL的索引是必不可少的一个问题

    比如一条SQL查询:

    select * from userstatic where nick like "辛巴%" and rip=3726854906;

    可能问到的问题有:

    1、如果nick不是索引,rip是索引,这样的条件顺序会不会有问题?

         这个问题比较简单,MySQL本身会对条件和索引进行判断,这样写可以用到索引,没有问题。

    2、如果nick和rip都是索引,这样写有没有问题?

    书写SQL语句的时候,我们不用在意条件的前后顺序,MySQL在查找的时候会进行优化。系统会根据实际情况来估算成本 选取成本小的方案 不一定是用哪个 有可能两个都用

    更多相关内容
  • mysql多个字段唯一索引

    千次阅读 2021-01-18 22:16:38
    方法:unique index(字段一,字段二)例子:CREATETABLEIFNOTEXISTS`ppserver`.`eventTable`(`userId`INTUNSIGNEDNOTnull,`taskId`INTUNSIGNEDNOTnull,`date`TIMESTAMP...

    方法:

    unique index(字段一,字段二)

    例子:CREATE TABLE IF NOT EXISTS `ppserver`.`eventTable`(

    `userId`         INT UNSIGNED      NOT null,

    `taskId`         INT UNSIGNED      NOT null,

    `date`           TIMESTAMP         DEFAULT CURRENT_TIMESTAMP,

    `createTime`     TIMESTAMP         DEFAULT CURRENT_TIMESTAMP,

    `endTime`        TIMESTAMP         DEFAULT CURRENT_TIMESTAMP,

    `taskStatus`     INT               DEFAULT NULL,

    `addGoldCoin`    int               DEFAULT NULL,

    `addCash`        FLOAT             DEFAULT NULL,

    `eventId`        INT UNSIGNED AUTO_INCREMENT DEFAULT null,

    unique index(`userId` ,`taskId`,`date`),

    PRIMARY KEY ( `eventId`)

    展开全文
  • mysql多字段唯一索引

    千次阅读 2021-01-19 06:32:34
    例如:有以下需求:每个人每一天只有可能产生一条记录:处了程序约定之外,数据库本身也可以设定:例如:user表中有userID,userName两个字段,如果不希望有2条一模一样的记录,需要给user表添加多个字段的联合唯一索引:alter...

    项目中需要用到联合唯一索引:

    例如:有以下需求:每个人每一天只有可能产生一条记录:处了程序约定之外,数据库本身也可以设定:

    例如:user表中有userID,userName两个字段,如果不希望有2条一模一样的记录,需要给user表添加多个字段的联合唯一索引:

    alter table user add nuique index(user_id,user_name);

    例如:

    alter table user_daily_money_info add unique index agd(user_account_id,game_id,daily_date);

    alter table user_daily_money_info add unique key agdkey(user_account_id,game_id,daily_date);

    这样如果向表中添加相同记录的时候,会返回一下错误信息:

    74db305c0fcde3450b76de38af78dc6f.png

    2还有一种情况就是,我们需要为以前的表 创建这个索引,有可能以前的数据中存在重复的记录 那怎么办呢?

    alter ignore table user add unique index(user_id,user_name);

    它会删除重复的记录(别怕,会保留一条),然后建立唯一索引,高效而且人性化.

    查看索引  show index from 数据库表名

    alter table 数据库add index 索引名称(数据库字段名称)

    PRIMARY KEY(主键索引)

    ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )

    UNIQUE(唯一索引)

    ALTER TABLE `table_name` ADD UNIQUE (`column`)

    INDEX(普通索引)

    mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

    FULLTEXT(全文索引)

    ALTER TABLE `table_name` ADD FULLTEXT ( `column` )

    多列索引

    ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

    1.普通索引。

    这是最基本的索引,它没有任何限制。它有以下几种创建方式:

    (1)创建索引:CREATE INDEX indexName ON

    tableName(tableColumns(length));如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是

    BLOB 和 TEXT 类型,必须指定length,下同。

    (2)修改表结构:ALTER tableName ADD INDEX [indexName] ON (tableColumns(length))

    (3)创建表的时候直接指定:CREATE TABLE tableName ( [...], INDEX [indexName] (tableColumns(length)) ;

    2.唯一索引。

    它与前面的”普通索引”类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:

    (1)创建索引:CREATE UNIQUE INDEX indexName ON tableName(tableColumns(length))

    (2)修改表结构:ALTER tableName ADD UNIQUE [indexName] ON (tableColumns(length))

    (3)创建表的时候直接指定:CREATE TABLE tableName ( [...], UNIQUE [indexName] (tableColumns(length));

    3.主键索引

    它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引:CREATE TABLE testIndex(i_testID INT

    NOT NULL AUTO_INCREMENT,vc_Name VARCHAR(16) NOT NULL,PRIMARY

    KEY(i_testID)); 当然也可以用ALTER命令。

    展开全文
  • Oracle多个字段联合索引保证唯一性

    千次阅读 2021-09-26 16:00:30
    今天在开发过程中遇到了需要两个字段联合保证唯一性,所以查阅了一些资料和博客,梳理一下以便之后用到!!! 首先,你要搞明白什么是唯一索引和唯一约束,其次它们之间的区别是什么? 前提 二者的定义 唯一...

         今天在开发过程中遇到了需要两个字段联合保证唯一性,所以查阅了一些资料和博客,梳理一下以便之后用到!!!

      首先,你要搞明白什么是唯一索引和唯一约束,其次它们之间的区别是什么?

    前提

    二者的定义

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

     唯一约束:唯一约束保证在一个字段或者一组字段里的数据与表中其它行的数据相比是唯一的(联合字段中,可以包含空值。)   

    备注:在Oracle中,唯一约束最多可以有32列。唯一约束可以在创建表时或使用ALTER TABLE语句创建

    二者的区别

    约束和索引,前者是用来检查数据的正确性,后者用来实现数据查询的优化,目的不同。
    唯一约束与唯一索引有所不同
    1、创建唯一约束会在Oracle中创建一个Constraint,同时也会创建一个该约束对应的唯一索引。
    2、创建唯一索引只会创建一个唯一索引,不会创建Constraint。也就是说其实唯一约束是通过创建唯一索引来实现的。
    在删除时这两者也有一定的区别:删除唯一约束时可以只删除约束而不删除对应的索引,所以对应的列还是必须唯一的,而删除了唯一索引的话就可以插入不唯一的值。

    目标

        接下来该干正事了,怎么创建联合索引保证唯一性!!!

    --示例表
    CREATE TABLE BIZ_PERSON(
      VARCHAR2(32) primary key ,
      NAME VARCHAR2(32) ,
      AGE  VARCHAR2(32)
    );
    
    --创建两个字段唯一索引,此时已能保证数据的唯一性
    CREATE UNIQUE INDEX UNIQUE_AGE_NAME ON 
    BIZ_PERSON(NVL2(NAME,AGE,NULL),NVL2(NAME,NAME,NULL));
    
    --如何查询当前表的索引和约束?
    --查询索引
    SELECT 
    b.uniqueness, 
    a.index_name, 
    a.table_name, 
    a.column_name 
    FROM all_ind_columns a, all_indexes b
    WHERE a.index_name=b.index_name AND a.table_name = upper('BIZ_PERSON')
    --查询约束
    SELECT * FROM all_constraints WHERE table_name='BIZ_PERSON';
     
    --删除 唯一索引
    drop index UNIQUE_AGE_NAME;
    --删除 唯一约束
    ALTER TABLE BIZ_PERSON DROP CONSTRAINT 约束名称;
     

    知识点扩展

    NULL指的是空值,或者非法值。
    NVL (expr1, expr2)->expr1为NULL,返回expr2;不为NULL,返回expr1。注意两者的类型要一致
    NVL2 (expr1, expr2, expr3) ->expr1不为NULL,返回expr2;为NULL,返回expr3。expr2和expr3类型不同的话,expr3会转换为expr2的类型
    NULLIF (expr1, expr2) ->相等返回NULL,不等返回expr1

    参考资料

    唯一索引_百度百科 (baidu.com)   

    唯一约束_百度百科 (baidu.com)                                                  

    (3条消息) oracle的联合约束(多个字段的唯一性)_sqiucheng的专栏-CSDN博客

       

        

    展开全文
  • Mysql哪些字段适合建立索引

    千次阅读 2020-03-24 15:38:38
    4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引; 5、索引应该建在选择性高的字段上; 6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引; 7、复合索引的建立需要进行仔细分析...
  • 转载自随心2017的博客 ...你创建一 组合索引 ( 班级, 姓名) 那么 SELECT * FROM 学生表 WHERE 班级='2010级3班' AND 姓名='张三' 将使用索引. SELECT * FROM 学生表 WHERE 班级='2010级3班' 将使用索引...
  • 4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引; 5、索引应该建在选择性高的字段上; 6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引; 7、复合索引的建立需要进行仔细分析...
  • MySQL给表里的某个字段建立索引

    千次阅读 2019-04-15 15:29:41
    注:`table_name` 和 `column` 中的``是Esc下方的一键 ~`,可省略不写``,直接写表名和字段名 1.添加PRIMARY KEY(主键索引): ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索引)...
  • oracle中多个字段组成唯一索引约束

    千次阅读 2018-11-26 18:59:02
    已经验证!!!欢迎相互学习交流 --原来EXPENSE_ITEM_CODE, EXPENSE_TYPE_CODE, EXP_REPORT_TYPE_CODE这三个为唯一索引...注意事项(报错dupplicate keys found,若表中要创建的唯一索引约束的四个字段在数据库该表...
  • 性别字段建立索引问题

    万次阅读 2018-09-25 18:32:35
    性别字段能不能建立索引 之前面试被问到一问题 ...如:我建了tb_test表,往里面插入了七百万数据,先给性别建立索引,查询开启 sql运行时间记录。 创建名为tb_index_test 的索引 alter ta...
  • 从MySQL 8.0.17开始, InnoDB支持创建多值索引(Multi-Valued Indexes),该索引是在JSON存储值数组的列上定义的二级索引,对于单个数据记录可以有多个索引记录。跟普通索引一样,也可以在`EXPLAIN`中查看到。
  • 建立索引的优缺点: 为什么要创建索引呢? 这是因为,创建索引可以大大提高系统的性能。 第一、通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二、可以大大加快 数据的检索速度,这也是创建...
  • 相信仔细看的同学一定已经发现问题所在了,没错,问题就在于我建立索引字段 `ext1` 是varchar类型的,一开始我给的值是非varchar类型的,所以才没有走索引,真的是 `细节决定成败`,顺便补充一句,也可以加一将...
  • 适合建立索引字段

    千次阅读 2017-12-26 16:36:53
    3、经常与其他表进行连接的表,在连接字段上应该建立索引;4、经常出现在Where子句中的字段,凡是大表的字段,应该建立索引;5、索引应该建在选择性高的字段上(枚举型字段不建索引);6、索引应该建在小字段上,...
  • mysql 索引优化order by 语句

    千次阅读 2021-03-03 18:54:25
    下面举例创建表时同时创建索引降序排序(sname 字段上普通索引降序)create table tbl1 (id int unique, sname varchar(50),index tbl1_index_sname(sname desc));在已有的表创建索引语法create [unique|fulltext|...
  • 哪些字段适合建立索引

    千次阅读 2018-07-26 23:17:40
    4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引; 5、索引应该建在选择性高的字段上; 6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引; 7、复合索引的建立需要进行仔细分析...
  • MySQL如何建立JSON字段索引

    千次阅读 2019-03-27 16:29:15
    概述 MySQL从5.7.8起开始支持JSON字段,这极大的丰富了...但MySQL并没有提供对JSON对象中的字段进行索引的功能,至少没有直接对其字段进行索引的方法。本文将介绍利用MySQL 5.7中的虚拟字段的功能来对JSON对象中...
  • 为时间字段索引

    千次阅读 2020-03-24 18:29:58
    文章目录为时间字段索引(待更进)一、问题1、描述:日期不一致2、原因:时区不同3、解决方法: 时区修改二、datetime和varchar类型效率比较1、背景2、开始三、时间字段索引1、聚集索引2、非聚集索引3、时间字段...
  • 哪些字段适合建索引

    千次阅读 2020-07-31 17:57:36
    4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引; 5、索引应该建在选择性高的字段上; 6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引; 7、复合索引的建立需要进行仔细分析...
  • 字段添加索引

    千次阅读 2019-04-30 12:43:37
    1.添加PRIMARY KEY(主键索引): ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) ; 2.添加UNIQUE(唯一索引): ALTER TABLE `table_name` ADD UNIQUE (`column`) ; 3.添加INDEX(普通索引) : ALTER ...
  • 表关联如何建立索引

    千次阅读 2019-10-22 11:23:16
    因为和a表的关联条件有多个,所以我首先想到的是组合索引。我知道组合索引有最左原则,但是我有一个条件是我的分区字段,所以我就把它跳过了,我觉得多数对索引不了解的同学都会是这个思路。 跳过那个字段之后...
  • 1、联合索引是由多个字段组成的索引。 2、查询时使用联合索引的一个字段,如果这个字段在联合索引中所有字段的第一个,那就会用到索引,否则就无法使用到索引。 3、联合索引IDX(字段A,字段B,字段C,字段D),当仅...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 262,428
精华内容 104,971
关键字:

多个字段建立索引