让搜索快如火箭 | sequelize(一)索引实践

618 阅读2分钟

前言

一名正在自由职业的程序员的独立开发之路

说明

本篇文章主要记录在sequelize 下如何使用索引

mysql的相关知识

索引分为单个索引和组合索引;索引可以极大的提高搜索效率

单个索引又分为唯一索引和非唯一索引,唯一索引就是每天记录此列的值不能重复,即使是空值也不能重复;非唯一索引不受限制

组合索引指的是2个以及2个以上的列组成一个组合,此组合不重复

创建索引

create UNIQUE index inde_name on table_name (column1[ASE,DESE],column2[ASE,DESE])

# create index 创建索引语句
# UNIQUE  唯一所以,不写就是普通索引
# index_name:索引的名字,在表中必须唯一
# table_name:表名
# column1[ASE,DESE],column2[ASE,DESE]:指定索引的列明(一个和多个组合)ASE(升序默认)DESC(降序)

查看索引

show index from table_name(表明)

image.png

删除索引

drop index index_name(索引的名字) on table_name(表明)

修改索引

# 就是删除 和 新增,无需那么麻烦

sequelize 中的索引如何设置

sequelize是一个 操作mysql ORM的工具,在里面也可以操作索引

sequelize设置索引

  1. 主键 primaryKey ,自动会创建唯一索引
  2. 通过 定义模型中的uniquetrue
  3. 通过 indexes中来设置 unique

注意点

  1. 通过indexes创建的索引名字默认是 table_name_clounm,可以通过name字段来指定
  2. 通过 定义模型中的uniquetrue的 索引名字为该 字段名字
  3. 索引不会自动删除和修改,需要你手动通过 mysql语句来删除(User.sync({ alter: true })
  4. 永远不要用Banner.sync({ force: true }),因为这会直接把 Banner删除,再重新创建,虽然达到了 删除索引的目的,但是破坏性太强,这和个操作尽量远离

代码如下

const Banner = sequelize.define('Banner', 
{
    {
     objectId: {
      type: DataTypes.UUID,
      defaultValue: DataTypes.UUIDV4, 
      primaryKey: true // # 主键 `primaryKey` ,自动会创建唯一索引
    },
    testA: {
      type: DataTypes.STRING,
      allowNull: false,
      defaultValue:'11',
      unique:true,  //  通过 定义模型中的`unique`为 `true`
      comment:'test 索引'
    },
    testB: {
      type: DataTypes.STRING,
      allowNull: false,
      defaultValue:'11',
      unique:true,  
      comment:'test 索引'
    },
    testC: {
      type: DataTypes.STRING,
      allowNull: false,
      defaultValue:'11',
      unique:true, 
      comment:'test 索引'
    },
},
  {
      timestamps: true,
      freezeTableName: true,
      indexes: [
       // 唯一索引
        { unique: true, fields: ['objectId'] },
        { unique: true, fields: ['testB'] }
        // 普通所用
         { unique: true, fields: ['testC'] }
         // 组合索引
         { unique: true, fields: ['testB','testC'] 
      ]
  });


相关链接

MySQL 索引 验证 & 约束 索引

总结

  1. 关于sequelize 中索引中有很多的设置,很多我也不知道干嘛的,也没有太研究

  2. 我这是在我的项目中实践出来的,貌似已经满足基本需求了(创建唯一索引,普通索引,组合索引,删除索引)