Подзапросы (в / существует), чтобы присоединиться

SELECT *, `o_cheque_request.member_id`, `o_cheque_request.wallet_id`
FROM `o_cheque_request`, `o_member`, o_memberinfo`
WHERE `o_cheque_request.member_id` = `o_member.member_id`
AND `o_member.member_id` = `o_memberinfo.member_id`
AND withdraw_date >='2012-07-21'
AND `o_cheque_request.member_id`
IN (SELECT `member_id` FROM `o_cheque_request` GROUP BY `member_id` HAVING SUM(gross_amount ) <=10000)
GROUP BY `o_cheque_request.withdraw_date`, `o_cheque_request.member_id` ORDER BY `request_id` DESC

это занимает много времени около 29 секунд, как уменьшить... используя соединение... Ребята, пожалуйста, помогите мне... Структура таблицы для o_cheque_request
request_id bigint (20) без знака NOT NULL auto_increment,
wallet_id int (11) NOT NULL по умолчанию '0',
member_id int (10) unsigned NOT NULL по умолчанию '0',
withdraw_date дата по умолчанию NULL,
amount int (10) unsigned NOT NULL по умолчанию '0',
gross_amount float (10,2) без знака NOT NULL по умолчанию '0.00',
admin_charge float (10,2) без знака NOT NULL по умолчанию '0.00',
tds float (10,2) без знака NOT NULL по умолчанию '0.00',
repurchase float (10,2) без знака NOT NULL по умолчанию '0.00',
net_amount float (10,2) без знака NOT NULL по умолчанию '0.00',
withdraw_type varchar (50) по умолчанию NULL,
bank_name varchar (50) по умолчанию NULL,
cheque_no varchar (50) по умолчанию NULL,
courier_name varchar (50) по умолчанию NULL,
tracking_no varchar (50) по умолчанию NULL,
cheque_date дата по умолчанию "0000-00-00",
ОСНОВНОЙ КЛЮЧ (request_id),
KEY member_id (member_id)
) ENGINE = InnoDB CHARSET ПО УМОЛЧАНИЮ =latin1 AUTO_INCREMENT=4738;

1 ответ

ПОПРОБУЙТЕ С ЭТИМ

 SELECT * FROM (
        SELECT *, `o_cheque_request.member_id`, `o_cheque_request.wallet_id`
        FROM `o_cheque_request`
        JOIN `o_member` ON `o_cheque_request.member_id` = `o_member.member_id`
        JOIN `o_memberinfo` ON `o_member.member_id` = `o_memberinfo.member_id`
        WHERE withdraw_date >='2012-07-21'
        GROUP BY `o_cheque_request.member_id` HAVING SUM(`o_cheque_request.gross_amount` ) <=10000
    ) AS T
    GROUP BY `withdraw_date`, `member_id` ORDER BY `request_id` DESC
Другие вопросы по тегам