Add slim endpoints for entities to speed up filters (#460)

* Move performers image column to end of table
* Remove redundant index
This commit is contained in:
InfiniteTF
2020-04-19 04:03:51 +02:00
committed by GitHub
parent 7ef0000744
commit 2a3c9742cc
14 changed files with 156 additions and 12 deletions

View File

@@ -26,3 +26,8 @@ func (r *queryResolver) AllMovies(ctx context.Context) ([]*models.Movie, error)
qb := models.NewMovieQueryBuilder()
return qb.All()
}
func (r *queryResolver) AllMoviesSlim(ctx context.Context) ([]*models.Movie, error) {
qb := models.NewMovieQueryBuilder()
return qb.AllSlim()
}

View File

@@ -25,3 +25,8 @@ func (r *queryResolver) AllPerformers(ctx context.Context) ([]*models.Performer,
qb := models.NewPerformerQueryBuilder()
return qb.All()
}
func (r *queryResolver) AllPerformersSlim(ctx context.Context) ([]*models.Performer, error) {
qb := models.NewPerformerQueryBuilder()
return qb.AllSlim()
}

View File

@@ -25,3 +25,8 @@ func (r *queryResolver) AllStudios(ctx context.Context) ([]*models.Studio, error
qb := models.NewStudioQueryBuilder()
return qb.All()
}
func (r *queryResolver) AllStudiosSlim(ctx context.Context) ([]*models.Studio, error) {
qb := models.NewStudioQueryBuilder()
return qb.AllSlim()
}

View File

@@ -16,3 +16,8 @@ func (r *queryResolver) AllTags(ctx context.Context) ([]*models.Tag, error) {
qb := models.NewTagQueryBuilder()
return qb.All()
}
func (r *queryResolver) AllTagsSlim(ctx context.Context) ([]*models.Tag, error) {
qb := models.NewTagQueryBuilder()
return qb.AllSlim()
}

View File

@@ -19,7 +19,7 @@ import (
var DB *sqlx.DB
var dbPath string
var appSchemaVersion uint = 6
var appSchemaVersion uint = 7
var databaseSchemaVersion uint
const sqlite3Driver = "sqlite3_regexp"

View File

@@ -0,0 +1,101 @@
DROP INDEX `performers_checksum_unique`;
DROP INDEX `index_performers_on_name`;
DROP INDEX `index_performers_on_checksum`;
ALTER TABLE `performers` RENAME TO `temp_old_performers`;
CREATE TABLE `performers` (
`id` integer not null primary key autoincrement,
`checksum` varchar(255) not null,
`name` varchar(255),
`gender` varchar(20),
`url` varchar(255),
`twitter` varchar(255),
`instagram` varchar(255),
`birthdate` date,
`ethnicity` varchar(255),
`country` varchar(255),
`eye_color` varchar(255),
`height` varchar(255),
`measurements` varchar(255),
`fake_tits` varchar(255),
`career_length` varchar(255),
`tattoos` varchar(255),
`piercings` varchar(255),
`aliases` varchar(255),
`favorite` boolean not null default '0',
`created_at` datetime not null,
`updated_at` datetime not null,
`image` blob not null
);
CREATE UNIQUE INDEX `performers_checksum_unique` on `performers` (`checksum`);
CREATE INDEX `index_performers_on_name` on `performers` (`name`);
INSERT INTO `performers` (
`id`,
`checksum`,
`name`,
`gender`,
`url`,
`twitter`,
`instagram`,
`birthdate`,
`ethnicity`,
`country`,
`eye_color`,
`height`,
`measurements`,
`fake_tits`,
`career_length`,
`tattoos`,
`piercings`,
`aliases`,
`favorite`,
`created_at`,
`updated_at`,
`image`
)
SELECT
`id`,
`checksum`,
`name`,
`gender`,
`url`,
`twitter`,
`instagram`,
`birthdate`,
`ethnicity`,
`country`,
`eye_color`,
`height`,
`measurements`,
`fake_tits`,
`career_length`,
`tattoos`,
`piercings`,
`aliases`,
`favorite`,
`created_at`,
`updated_at`,
`image`
FROM `temp_old_performers`;
DROP INDEX `index_performers_scenes_on_scene_id`;
DROP INDEX `index_performers_scenes_on_performer_id`;
ALTER TABLE performers_scenes RENAME TO temp_old_performers_scenes;
CREATE TABLE `performers_scenes` (
`performer_id` integer,
`scene_id` integer,
foreign key(`performer_id`) references `performers`(`id`),
foreign key(`scene_id`) references `scenes`(`id`)
);
CREATE INDEX `index_performers_scenes_on_scene_id` on `performers_scenes` (`scene_id`);
CREATE INDEX `index_performers_scenes_on_performer_id` on `performers_scenes` (`performer_id`);
INSERT INTO `performers_scenes` (
`performer_id`,
`scene_id`
)
SELECT
`performer_id`,
`scene_id`
FROM `temp_old_performers_scenes`;
DROP TABLE `temp_old_performers`;
DROP TABLE `temp_old_performers_scenes`;

View File

@@ -109,6 +109,10 @@ func (qb *MovieQueryBuilder) All() ([]*Movie, error) {
return qb.queryMovies(selectAll("movies")+qb.getMovieSort(nil), nil, nil)
}
func (qb *MovieQueryBuilder) AllSlim() ([]*Movie, error) {
return qb.queryMovies("SELECT movies.id, movies.name FROM movies "+qb.getMovieSort(nil), nil, nil)
}
func (qb *MovieQueryBuilder) Query(findFilter *FindFilterType) ([]*Movie, int) {
if findFilter == nil {
findFilter = &FindFilterType{}

View File

@@ -105,6 +105,10 @@ func (qb *PerformerQueryBuilder) All() ([]*Performer, error) {
return qb.queryPerformers(selectAll("performers")+qb.getPerformerSort(nil), nil, nil)
}
func (qb *PerformerQueryBuilder) AllSlim() ([]*Performer, error) {
return qb.queryPerformers("SELECT performers.id, performers.name, performers.gender FROM performers "+qb.getPerformerSort(nil), nil, nil)
}
func (qb *PerformerQueryBuilder) Query(performerFilter *PerformerFilterType, findFilter *FindFilterType) ([]*Performer, int) {
if performerFilter == nil {
performerFilter = &PerformerFilterType{}

View File

@@ -93,6 +93,10 @@ func (qb *StudioQueryBuilder) All() ([]*Studio, error) {
return qb.queryStudios(selectAll("studios")+qb.getStudioSort(nil), nil, nil)
}
func (qb *StudioQueryBuilder) AllSlim() ([]*Studio, error) {
return qb.queryStudios("SELECT studios.id, studios.name FROM studios "+qb.getStudioSort(nil), nil, nil)
}
func (qb *StudioQueryBuilder) Query(findFilter *FindFilterType) ([]*Studio, int) {
if findFilter == nil {
findFilter = &FindFilterType{}

View File

@@ -33,7 +33,7 @@ func (qb *TagQueryBuilder) Create(newTag Tag, tx *sqlx.Tx) (*Tag, error) {
if err := tx.Get(&newTag, `SELECT * FROM tags WHERE id = ? LIMIT 1`, studioID); err != nil {
return nil, err
}
return &newTag, nil
}
@@ -136,6 +136,10 @@ func (qb *TagQueryBuilder) All() ([]*Tag, error) {
return qb.queryTags(selectAll("tags")+qb.getTagSort(nil), nil, nil)
}
func (qb *TagQueryBuilder) AllSlim() ([]*Tag, error) {
return qb.queryTags("SELECT tags.id, tags.name FROM tags "+qb.getTagSort(nil), nil, nil)
}
func (qb *TagQueryBuilder) Query(findFilter *FindFilterType) ([]*Tag, int) {
if findFilter == nil {
findFilter = &FindFilterType{}