索引
About 4 min
索引
索引
是为了加速对表中数据行的检索而创建的一种分散的存储结构。 索引
是针对表而建立的,它是由数据页面以外的索引页面组成的,每个索引页面中的行都会含有逻辑指针,以便加速检索物理数据。
常见MYSQL
、Oracle
等数据库都有使用到索引,因为这能够大大加速对数据的检索, 甚至像ElasticSearch
数据库还出现了倒排索引 这样的概念。
Sequelize
框架本身一套ORM映射框架,处理编程对象和数据库表字段关系的映射。当表中的字段设置了索引, 再到Sequelize
的模型中配置利用indexes
字段配置索引,即可在查询时使用索引。例如:
const { Sequelize } = require('sequelize')
const sequelize = new Sequelize('postgres://user:pass@142vip.cn:5432/142vip')
const User = sequelize.define('User', { /* attributes */}, {
indexes: [
// 创建唯一索引
{
unique: true,
fields: ['name']
},
]
})
对User
表中的name
字段创建唯一索引。
唯一索引:在表中限制该字段唯一、不重复,同时支持查询检索
索引的分类和用途有很多,Sequelize
框架对索引的支持有限,这里给出简单的配置例子:
const { Sequelize } = require('sequelize')
const sequelize = new Sequelize('postgres://user:pass@142vip.cn:5432/142vip')
/**
* 定义用户表对应的模型
*/
const User = sequelize.define('User', {
// ... 一些配置
}, {
indexes: [
// 创建唯一索引,unique用来判断是否为唯一索引
{
unique: true,
fields: ['name'],
},
// 使用 jsonb_path_ops 运算符对data字段创建 gin 索引
{
fields: ['data'],
using: 'gin',
operator: 'jsonb_path_ops',
},
// name字段配置索引名称,默认的索引名是: 表明名_列名
// 创建联合索引,涉及多个字段
{
name: 'public_by_author',
fields: ['author', 'status'],
where: {
status: 'public',
},
},
// 对于排序字段创建BTree索引
{
name: 'title_index',
using: 'BTREE',
fields: ['author', {
name: 'title',
collate: 'en_US',
order: 'DESC',
length: 5,
}],
},
],
})
module.exports = User
可以通过源码 查看indexes
字段的类型支持
在介绍Sequelize
创建连接实例是,介绍到Sequelize
对象提供的sync
函数,这个API可以在连接时将模型同步到数据库表中。
当模型中配置indexes
字段支持索引时,使用sequelize.sync()
函数同样可以将模型中定义的索引同步到表中