前言
一名正在自由职业的程序员的独立开发之路
说明
本篇文章主要记录在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(表明)
删除索引
drop index index_name(索引的名字) on table_name(表明)
修改索引
# 就是删除 和 新增,无需那么麻烦
sequelize 中的索引如何设置
sequelize是一个 操作mysql ORM的工具,在里面也可以操作索引
sequelize设置索引
- 主键
primaryKey,自动会创建唯一索引 - 通过 定义模型中的
unique为true - 通过
indexes中来设置unique
注意点
- 通过
indexes创建的索引名字默认是table_name_clounm,可以通过name字段来指定 - 通过 定义模型中的
unique为true的 索引名字为该 字段名字 - 索引不会自动删除和修改,需要你手动通过
mysql语句来删除(User.sync({ alter: true })) - 永远不要用
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']
]
});
相关链接
总结
-
关于
sequelize中索引中有很多的设置,很多我也不知道干嘛的,也没有太研究 -
我这是在我的项目中实践出来的,貌似已经满足基本需求了(创建唯一索引,普通索引,组合索引,删除索引)