Remove usages of FIND_IN_SET
FIND_IN_SET doesn't make use of indexes
This commit is contained in:
@ -31,31 +31,33 @@ impl Recordable for Options {
|
||||
.filter(|(_, channel)| channel.is_text_based())
|
||||
.map(|(id, _)| id.get().to_string())
|
||||
.collect::<Vec<String>>()
|
||||
.join(",")
|
||||
}) {
|
||||
sqlx::query!(
|
||||
let placeholder = vec!["?"; channels.len()].join(",");
|
||||
let sql = format!(
|
||||
"
|
||||
UPDATE reminders
|
||||
INNER JOIN `channels`
|
||||
ON `channels`.id = reminders.channel_id
|
||||
SET reminders.`utc_time` = DATE_ADD(reminders.`utc_time`, INTERVAL ? SECOND)
|
||||
WHERE FIND_IN_SET(channels.`channel`, ?)
|
||||
",
|
||||
combined_time as i64,
|
||||
channels
|
||||
)
|
||||
.execute(&ctx.data().database)
|
||||
.await
|
||||
.unwrap();
|
||||
UPDATE reminders
|
||||
INNER JOIN `channels`
|
||||
ON `channels`.id = reminders.channel_id
|
||||
SET reminders.`utc_time` = DATE_ADD(reminders.`utc_time`, INTERVAL ? SECOND)
|
||||
WHERE channels.`channel` IN ({placeholder})
|
||||
"
|
||||
);
|
||||
|
||||
let mut query = sqlx::query(&sql).bind(combined_time);
|
||||
for channel in channels {
|
||||
query = query.bind(channel);
|
||||
}
|
||||
|
||||
query.execute(&ctx.data().database).await.unwrap();
|
||||
} else {
|
||||
sqlx::query!(
|
||||
"
|
||||
UPDATE reminders
|
||||
INNER JOIN `channels`
|
||||
ON `channels`.id = reminders.channel_id
|
||||
SET reminders.`utc_time` = reminders.`utc_time` + ?
|
||||
WHERE channels.`channel` = ?
|
||||
",
|
||||
UPDATE reminders
|
||||
INNER JOIN `channels`
|
||||
ON `channels`.id = reminders.channel_id
|
||||
SET reminders.`utc_time` = reminders.`utc_time` + ?
|
||||
WHERE channels.`channel` = ?
|
||||
",
|
||||
combined_time as i64,
|
||||
ctx.channel_id().get()
|
||||
)
|
||||
|
Reference in New Issue
Block a user