2014-12-14 4 views
0
SELECT COUNT(s.fid) AS tcount, SUM(t.size) AS tsize, s.uid 
FROM xbt_files_users AS s INNER JOIN torrents AS t 
ON s.fid = t.id 
WHERE s.active = 1 AND s.mtime > '.$time.' AND s.remaining = 0 AND t.size >= 52428800 
GROUP BY s.uid 

У меня есть некоторые проблемы с этим запросом, в занят, несколько раз занимает более 20 секунд ... xbt_files_users оказывает индекс для: ARM (активный, остальные, время изменения), UID, (FID/UID - уникальный) потоки оказывает индекс для размера, начального ID It`s с помощью:MYSQL Выберите со счетом, сумма, внутреннее соединение и группа по

Используя где; Использование временных; Использование FileSort для xbt_files_users

и

Использование где торрентов

Это ли способ улучшить этот запрос?

+1

Чтобы помочь вам лучше, не могли бы вы показать нам, что ваш шоу создает таблицу? то есть. 'SHOW CREATE TABLE xbt_files_users;' и 'SHOW CREATE TABLE торренты ', а также план выполнения запроса' EXPLAIN EXTENDED SELECT .. ваш запрос идет здесь ... ', как правило, создавая индекс на xbt_files_users (fid, active, оставшееся, mtime), а другое на торрентах (id, size) поможет вам предположить, что типы id и fid идентичны – Jaylen

+0

Согласитесь с Mike ... ваша таблица торрентов должна быть проиндексирована (ID, SIZE) , тогда критерии размера ... сначала не начинаются с размера, а затем идентификатора. – DRapp

ответ

0

Это ваш запрос:

SELECT COUNT(s.fid) AS tcount, SUM(t.size) AS tsize, s.uid 
FROM xbt_files_users s INNER JOIN 
    torrents t 
    ON s.fid = t.id 
WHERE s.active = 1 AND s.mtime > '.$time.' AND s.remaining = 0 AND t.size >= 52428800 
GROUP BY s.uid 

Лучшие показатели для этих запросов являются xbt_files_users(active, remaining, mtime, fid, uid) и torrents(id, size). Я бы начал с этих индексов.

+0

В таблице xbt лучшим индексом будет то, что вы указали, но без uid, поскольку это недействительный столбец. Также фид должен быть первым столбцом, иначе индекс не может быть использован. – Jaylen

+0

@Mike. , , У 'select' есть' s.uid', поэтому я не знаю, почему вы считаете, что это недействительный столбец. Что касается упорядочения столбцов, то это довольно интенционально, поэтому фильтры 'where' являются первыми в индексе, за которыми следуют столбцы, используемые для соединения, а затем выберите. –

Смежные вопросы