MySql - медленная фаза отправки данных

мои «чистые» решения Swift без соответствия Post для Hashable (требуется Set)

struct Post {
    var id: Int
}

let posts = [Post(id: 1),Post(id: 2),Post(id: 1),Post(id: 3),Post(id: 4),Post(id: 2)]

// (1)
var res:[Post] = []
posts.forEach { (p) -> () in
    if !res.contains ({ $0.id == p.id }) {
        res.append(p)
    }
}
print(res) // [Post(id: 1), Post(id: 2), Post(id: 3), Post(id: 4)]

// (2)
let res2 = posts.reduce([]) { (var r, p) -> [Post] in
    if !r.contains ({ $0.id == p.id }) {
        r.append(p)
    }
    return r
}

print(res2) // [Post(id: 1), Post(id: 2), Post(id: 3), Post(id: 4)]

Я предпочитаю (1) инкапсулировать в функцию (aka func unique(posts:[Post])->[Post]), возможно, расширение Array .. ..

30
задан 14 May 2009 в 14:23
поделиться

2 ответа

Есть ли у вас индексы для этой таблицы? Вы сказали, что возвращается около 300. Но сколько нужно перерыть, чтобы найти эти 300?

1
ответ дан 7 July 2019 в 20:02
поделиться

План объяснения обычно является лучшим местом для начала, когда у вас медленный запрос. Чтобы получить его, запустите

DESCRIBE SELECT source_id FROM directions WHERE (destination_id = 10);

. Это покажет вам таблицу, в которой перечислены шаги, необходимые для выполнения вашего запроса. Если вы видите большое значение в столбце «строки» и NULL в столбце «ключ», это означает, что вашему запросу необходимо сканировать большое количество строк, чтобы определить, какие из них вернуть.

В этом случае добавление index on destination_id должен значительно ускорить ваш запрос за счет некоторой скорости вставки и удаления (поскольку индекс также необходимо будет обновить).

21
ответ дан 27 November 2019 в 21:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: