Skip to content

Commit 62f0988

Browse files
authored
Merge pull request #1337 from hotate29/create-index
Create indexes on the ranking tables
2 parents 1331d79 + bba7574 commit 62f0988

File tree

6 files changed

+22
-16
lines changed

6 files changed

+22
-16
lines changed

atcoder-problems-backend/sql-client/src/internal/virtual_contest_manager.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ impl VirtualContestManager for PgPool {
157157
async fn get_own_contests(&self, internal_user_id: &str) -> Result<Vec<VirtualContestInfo>> {
158158
let contests = sqlx::query_as(
159159
r"
160-
SELECT
160+
SELECT
161161
id,
162162
title,
163163
memo,
@@ -184,7 +184,7 @@ impl VirtualContestManager for PgPool {
184184
) -> Result<Vec<VirtualContestInfo>> {
185185
let contests = sqlx::query_as(
186186
r"
187-
SELECT
187+
SELECT
188188
a.id,
189189
a.title,
190190
a.memo,
@@ -234,7 +234,7 @@ impl VirtualContestManager for PgPool {
234234
async fn get_single_contest_participants(&self, contest_id: &str) -> Result<Vec<String>> {
235235
let participants = sqlx::query(
236236
r"
237-
SELECT
237+
SELECT
238238
b.atcoder_user_id
239239
FROM (
240240
SELECT internal_user_id
@@ -280,7 +280,7 @@ impl VirtualContestManager for PgPool {
280280
async fn get_recent_contest_info(&self) -> Result<Vec<VirtualContestInfo>> {
281281
let contests = sqlx::query_as(
282282
r"
283-
SELECT
283+
SELECT
284284
id,
285285
title,
286286
memo,

atcoder-problems-backend/sql-client/src/language_count.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ impl LanguageCountClient for PgPool {
113113
async fn load_language_count(&self) -> Result<Vec<UserLanguageCount>> {
114114
let count = sqlx::query_as(
115115
r"
116-
SELECT
116+
SELECT
117117
user_id,
118118
simplified_language,
119119
problem_count
@@ -150,7 +150,7 @@ impl LanguageCountClient for PgPool {
150150
let count = sqlx::query_as(
151151
r"
152152
SELECT user_id, simplified_language, problem_count FROM language_count
153-
WHERE user_id = $1
153+
WHERE LOWER(user_id) = LOWER($1)
154154
ORDER BY simplified_language
155155
",
156156
)
@@ -171,7 +171,7 @@ impl LanguageCountClient for PgPool {
171171
OVER(PARTITION BY simplified_language ORDER BY problem_count DESC) AS rank
172172
FROM language_count
173173
)
174-
AS s2 WHERE user_id = $1
174+
AS s2 WHERE LOWER(user_id) = LOWER($1)
175175
ORDER BY simplified_language
176176
",
177177
)

atcoder-problems-backend/sql-client/src/rated_point_sum.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ impl RatedPointSumClient for PgPool {
2727
GROUP BY contest_id
2828
) AS contest_problem_count
2929
JOIN contests ON contests.id=contest_problem_count.contest_id
30-
WHERE
30+
WHERE
3131
contests.start_epoch_second >= $1
3232
AND contests.rate_change != $2
3333
AND contest_problem_count.problem_count >= 2

atcoder-problems-backend/sql-client/src/simple_client.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ impl SimpleClient for PgPool {
114114
async fn load_contests(&self) -> Result<Vec<Contest>> {
115115
let contests = sqlx::query_as(
116116
r"
117-
SELECT
117+
SELECT
118118
id,
119119
start_epoch_second,
120120
duration_second,

atcoder-problems-backend/sql-client/src/submission_client.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ impl SubmissionClient for PgPool {
121121
r"
122122
SELECT * FROM submissions
123123
WHERE result = 'AC'
124-
AND user_id = ANY($1)
124+
AND LOWER(user_id) = ANY($1)
125125
",
126126
)
127127
.bind(user_ids)
@@ -136,11 +136,11 @@ impl SubmissionClient for PgPool {
136136
SubmissionRequest::InvalidResult { from_second } => sqlx::query_as(
137137
r"
138138
SELECT * FROM submissions
139-
WHERE
139+
WHERE
140140
result != ALL(
141141
ARRAY['AC', 'WA', 'TLE', 'CE', 'RE', 'MLE', 'OLE', 'QLE', 'IE', 'NG']
142142
)
143-
AND
143+
AND
144144
epoch_second >= $1
145145
ORDER BY id DESC
146146
",
@@ -163,7 +163,7 @@ impl SubmissionClient for PgPool {
163163
} => sqlx::query_as(
164164
r"
165165
SELECT * FROM submissions
166-
WHERE user_id = ANY($1)
166+
WHERE LOWER(user_id) = ANY($1)
167167
AND problem_id = ANY($2)
168168
AND epoch_second >= $3
169169
AND epoch_second <= $4

config/database-definition.sql

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ CREATE TABLE submissions (
1616
execution_time INT,
1717
PRIMARY KEY (id)
1818
);
19-
CREATE INDEX ON submissions (user_id);
20-
CREATE INDEX ON submissions (LOWER(user_id));
2119
CREATE INDEX ON submissions (epoch_second);
2220
CREATE INDEX ON submissions (user_id, epoch_second ASC);
2321
CREATE INDEX ON submissions (LOWER(user_id), epoch_second ASC);
@@ -79,6 +77,8 @@ CREATE TABLE accepted_count (
7977
problem_count INT NOT NULL,
8078
PRIMARY KEY (user_id)
8179
);
80+
CREATE INDEX ON accepted_count (LOWER(user_id));
81+
CREATE INDEX ON accepted_count (problem_count DESC, user_id);
8282

8383
DROP TABLE IF EXISTS points;
8484
CREATE TABLE points (
@@ -94,6 +94,8 @@ CREATE TABLE rated_point_sum (
9494
point_sum BIGINT NOT NULL,
9595
PRIMARY KEY (user_id)
9696
);
97+
CREATE INDEX ON rated_point_sum (LOWER(user_id));
98+
CREATE INDEX ON rated_point_sum (point_sum DESC, user_id);
9799

98100
DROP TABLE IF EXISTS language_count;
99101
CREATE TABLE language_count (
@@ -102,6 +104,8 @@ CREATE TABLE language_count (
102104
problem_count INT NOT NULL,
103105
PRIMARY KEY (user_id, simplified_language)
104106
);
107+
CREATE INDEX ON language_count (LOWER(user_id));
108+
CREATE INDEX ON language_count (simplified_language, problem_count DESC, user_id);
105109

106110
DROP TABLE IF EXISTS predicted_rating;
107111
CREATE TABLE predicted_rating (
@@ -124,6 +128,8 @@ CREATE TABLE max_streaks (
124128
streak BIGINT NOT NULL,
125129
PRIMARY KEY (user_id)
126130
);
131+
CREATE INDEX ON max_streaks (LOWER(user_id));
132+
CREATE INDEX ON max_streaks (streak DESC, user_id);
127133

128134
-- For internal services:
129135
DROP TABLE IF EXISTS internal_problem_list_items;
@@ -186,7 +192,7 @@ CREATE INDEX ON internal_virtual_contest_items (internal_virtual_contest_id);
186192
CREATE TABLE internal_virtual_contest_participants (
187193
internal_virtual_contest_id VARCHAR(255) REFERENCES internal_virtual_contests(id) ON DELETE CASCADE ON UPDATE CASCADE,
188194
internal_user_id VARCHAR(255) REFERENCES internal_users ON DELETE CASCADE ON UPDATE CASCADE,
189-
PRIMARY KEY (internal_virtual_contest_id, internal_user_id)
195+
PRIMARY KEY (internal_virtual_contest_id, internal_user_id)
190196
);
191197
CREATE INDEX ON internal_virtual_contest_participants (internal_user_id);
192198

0 commit comments

Comments
 (0)