mirror of
https://github.com/owncast/owncast.git
synced 2025-11-02 11:56:57 +08:00
Messages table fixes to improve query performance (#2026)
* Move to yaml sqlc config * Add util for ungraceful sql execs * Fix messages schema + add indexes * Add migration to drop+recreate messages table * Create index only if does not exist * Fix typo * Unexport function
This commit is contained in:
@ -13,30 +13,26 @@ import (
|
||||
func CreateMessagesTable(db *sql.DB) {
|
||||
createTableSQL := `CREATE TABLE IF NOT EXISTS messages (
|
||||
"id" string NOT NULL,
|
||||
"user_id" INTEGER,
|
||||
"user_id" TEXT,
|
||||
"body" TEXT,
|
||||
"eventType" TEXT,
|
||||
"hidden_at" DATETIME,
|
||||
"timestamp" DATETIME,
|
||||
"title" TEXT,
|
||||
"subtitle" TEXT,
|
||||
"image" TEXT,
|
||||
"link" TEXT,
|
||||
"title" TEXT,
|
||||
"subtitle" TEXT,
|
||||
"image" TEXT,
|
||||
"link" TEXT,
|
||||
PRIMARY KEY (id)
|
||||
);CREATE INDEX index ON messages (id, user_id, hidden_at, timestamp);
|
||||
CREATE INDEX id ON messages (id);
|
||||
CREATE INDEX user_id ON messages (user_id);
|
||||
CREATE INDEX hidden_at ON messages (hidden_at);
|
||||
CREATE INDEX timestamp ON messages (timestamp);`
|
||||
);`
|
||||
mustExec(createTableSQL, db)
|
||||
|
||||
stmt, err := db.Prepare(createTableSQL)
|
||||
if err != nil {
|
||||
log.Fatal("error creating chat messages table", err)
|
||||
}
|
||||
defer stmt.Close()
|
||||
if _, err := stmt.Exec(); err != nil {
|
||||
log.Fatal("error creating chat messages table", err)
|
||||
}
|
||||
// Create indexes
|
||||
mustExec(`CREATE INDEX IF NOT EXISTS user_id_hidden_at_timestamp ON messages (id, user_id, hidden_at, timestamp);`, db)
|
||||
mustExec(`CREATE INDEX IF NOT EXISTS idx_id ON messages (id);`, db)
|
||||
mustExec(`CREATE INDEX IF NOT EXISTS idx_user_id ON messages (user_id);`, db)
|
||||
mustExec(`CREATE INDEX IF NOT EXISTS idx_hidden_at ON messages (hidden_at);`, db)
|
||||
mustExec(`CREATE INDEX IF NOT EXISTS idx_timestamp ON messages (timestamp);`, db)
|
||||
mustExec(`CREATE INDEX IF NOT EXISTS idx_messages_hidden_at_timestamp on messages(hidden_at, timestamp);`, db)
|
||||
}
|
||||
|
||||
// GetMessagesCount will return the number of messages in the database.
|
||||
|
||||
Reference in New Issue
Block a user