Есть ли разница между этими запросами в вопросе производительности в таблице с 1 million record
?
id
IS PRIMARY
userid
IS INDEXED
name
IS UNIQUE
Комбинированные запросы:
$Query = 'SELECT name, (SELECT EXISTS (SELECT id FROM reports WHERE userid = 1)) AS status
FROM users
WHERE id = 1
LIMIT 1';
$stmt->prepare($Query);
$stmt->execute();
$row = $stmt->fetch();
$name = $row['name'];
$status = $row['status'];
Несколько запросов:
$Query = 'SELECT name
FROM users
WHERE id = 1
LIMIT 1';
$stmt->prepare($Query);
$stmt->execute();
$row = $stmt->fetch();
$name = $row['name'];
$Query = 'SELECT EXISTS (SELECT id FROM reports WHERE userid = 1)';
$stmt->prepare($Query);
$stmt->execute();
$status = $stmt->fetchColumn();
Во второй версии MySQL должен скомпилировать, проанализировать и выполнить два запроса. Во-первых, только один запрос должен быть скомпилирован, проанализирован и выполнен.
Останавливаться на достигнутом. Как вы думаете, что быстрее? И примерно сколько?
Как и во всех вопросах производительности, вы можете попробовать сами и посмотреть, что быстрее.
Накладные расходы на выполнение таких простых запросов могут быть весьма важными. Если вам нужна производительность, вам нужен индекс для users(id, name)
и для reports(userid)
. Первый запрос должен быть быстрее из-за накладных расходов на выполнение запросов.