Node.js/Sequelize
[ORM] ๐ ์ํ๋ผ์ด์ฆ - ๋ชจ๋ธ INDEX / FULLTEXT ์ค์ ํ๊ธฐ
์ธํ_
2022. 7. 19. 06:00
Sequelize ์ธ๋ฑ์ค ์ค์ ํ๊ธฐ
์ํ๋ผ์ด์ฆ ๋ชจ๋ธ์ ํ ์ด๋ธ ์ต์ ์ ํ๋ ๊ฐ์ฒด ๋ธ๋ก์ indexes ๋ก ๋ฐฐ์ด์ ์ ์ธํด์ฃผ๋ฉด ๋๋ค.
const Sequelize = require('sequelize');
module.exports = class User extends Sequelize.Model {
//* ํ
์ด๋ธ ํ๋ ์ค์
static init(sequelize) {
return super.init(
{
//& ์ํ๋ผ์ด์ฆ๋ id ์๋ ์์ฑ (auto_increament + Primary ์ธ๋ฑ์ค)
// id : { ... }
email: {
type: Sequelize.STRING(40),
allowNull: true,
unique: true, // ์ ๋ํฌ ๋ณด์กฐ ์ธ๋ฑ์ค ์์ฑ
},
nick: {
type: Sequelize.STRING(15),
allowNull: false,
},
password: {
type: Sequelize.STRING(100),
},
},
{
sequelize,
timestamps: true, // createdAt, updatedAt ์๋ ์์ฑ
underscored: false, // camel ์คํ์ผ๋ก
modelName: 'User', // ๋ชจ๋ธ๋ช
tableName: 'users', // ํ
์ด๋ธ๋ช
paranoid: true, // deletedAt ์๋ ์์ฑ
charset: 'utf8', // ํ๊ธ ์ธ์ฝ๋ฉ ์ค์
collate: 'utf8_general_ci',
indexes: [ // ์ธ๋ฑ์ค ์ค์
{
name: 'nick_index', // ์ด๋ฆ์ ์ง์ ํด์ฃผ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ ์ธ๋ฑ์ค๋ช
์ [table]_[fields]
fields: ['nick'], // nick์ ์ผ๋ฐ ๋ณด์กฐ ์ธ๋ฑ์ค ์์ฑ
},
],
},
);
}
//* ํ
์ด๋ธ ๊ด๊ณ ์ค์
static associate(db) {
// ...
}
};
์ธ๋ฑ์ค ์ ๋ณด๋ฅผ ๋ณด๋ฉด, users ํ ์ด๋ธ์ ์ด 3๊ฐ์ ์ธ๋ฑ์ค๊ฐ ๋ฑ๋ก๋จ์ ํ์ธ ํ ์ ์๋ค.
show index from users;
์ด์ธ์ ์ํ๋ผ์ด์ฆ ์ธ๋ฑ์ค ์ต์ ๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
๋ค์ค ์ธ๋ฑ์ค๋ฅผ ์ค์ ํ ์ ์์ผ๋ฉฐ, ์ธ๋ฑ์ค ์๊ณ ๋ฆฌ์ฆ๋ ์ ํ ์๋ ์๋ค.
Sequelize FULLTEXT ์ค์ ํ๊ธฐ
ํ ํ
์คํธ ์ธ๋ฑ์ค ์ค์ ์ ์์ ์ธ๋ฑ์ค ๋ฌธ๋ฒ์์ type: 'FULLTEXT' ๋ฅผ ์ง์ ํ๋ฉด ๋๋ค.
const Sequelize = require('sequelize');
module.exports = class Post extends Sequelize.Model {
static init(sequelize) {
return super.init(
{
content: {
type: Sequelize.STRING(200),
allowNull: false,
},
img: {
type: Sequelize.STRING(500),
allowNull: true,
},
},
{
sequelize,
timestamps: true,
underscored: false,
modelName: 'Post',
tableName: 'posts',
paranoid: false,
charset: 'utf8mb4',
collate: 'utf8mb4_general_ci',
indexes: [ // ์ธ๋ฑ์ค ์ค์
{
// ์ธ๋ฑ์ค ์ด๋ฆ์ ๋ฐ๋ก ์ง์ ํด์ฃผ์ง ์์, ์ธ๋ฑ์ค๋ช
์ [table]_[fields]
type: 'FULLTEXT', // ํํ
์คํธ ์ธ๋ฑ์ค ์ค์
fields: ['content'],
},
],
},
);
}
static associate(db) {
//* Post(N) : User(1)
//? db.Post.belongsto(db.User, { foreignKey: 'Userid', targetKey: 'id' })
db.Post.belongsTo(db.User);
}
};
show index from posts;