MySQL 5.6.39 - эти операторы подходят для хранимой процедуры? - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь упростить некоторые задачи и вместо сценария bash, который порождает несколько процессов mysqlclient, я считаю, что хранимые процедуры на самом деле будут более быстрым методом

Я пробовал некоторые скрипты Python и некоторые другие скрипты bash, и они работают нормально, но мне любопытно, будет ли лучше хранимая процедура с несколькими триггерами событий

Примечание. Это будет применяться к ~ 700 идентичным схемам БД и запускаться одновременно или последовательно через сценарии (некоторые советы также будут полезны. Если это будет лучше, если вы попытаетесь использовать многопоточность с идентификатором Python, например, знать

    USE `<db>`;
    DROP procedure IF EXISTS `archive_table`;

    DELIMITER //
    USE `basegps3`//
    CREATE PROCEDURE `archive_table`(IN trunc_date DATETIME)
    BEGIN

        DECLARE max_loc_id INT DEFAULT 1;

        SELECT IFNULL(MAX(location_id),1) INTO max_loc_id FROM location;
        INSERT IGNORE INTO arc_location SELECT * FROM location WHERE update_time < trunc_date AND location_id != max_loc_id;
        DELETE FROM location WHERE update_time < trunc_date AND location_id != max_loc_id;
        INSERT IGNORE INTO location SELECT l.* FROM arc_location l INNER JOIN vehicle_info USING(location_id);
        DELETE FROM arc_location WHERE location_id IN (SELECT location_id FROM vehicle_info);
        INSERT IGNORE INTO arc_message SELECT * FROM message WHERE create_time < trunc_date;
        DELETE FROM message WHERE create_time < trunc_date;
        INSERT IGNORE INTO arc_qt_answer SELECT * FROM qt_answer WHERE date_time < trunc_date;
        INSERT IGNORE INTO arc_phone_error SELECT * FROM phone_error WHERE timestamp < trunc_date;
        DELETE FROM phone_error WHERE timestamp < trunc_date;
        INSERT IGNORE INTO arc_status_change SELECT * FROM status_change WHERE timestamp < trunc_date AND most_recent = 0;
        DELETE FROM status_change WHERE timestamp < trunc_date and most_recent = 0;
        INSERT IGNORE INTO arc_area_points SELECT * FROM area_points WHERE area_id IN (SELECT area_id FROM area WHERE expire_time IS NOT NULL AND expire_time < trunc_date AND area_type_id = 1);
        DELETE FROM area_points WHERE area_id IN (SELECT area_id FROM area WHERE expire_time IS NOT NULL AND expire_time < trunc_date AND area_type_id = 1);
        INSERT IGNORE INTO arc_hotspot SELECT * FROM hotspot WHERE area_id IN (SELECT area_id FROM area WHERE expire_time IS NOT NULL AND expire_time < trunc_date AND area_type_id = 1);
        DELETE FROM hotspot WHERE area_id IN (SELECT area_id FROM area WHERE expire_time IS NOT NULL AND expire_time < trunc_date AND area_type_id = 1);
        INSERT IGNORE INTO arc_area SELECT * FROM area WHERE expire_time IS NOT NULL AND expire_time < trunc_date AND area_type_id = 1;
        DELETE FROM area WHERE expire_time IS NOT NULL AND expire_time < trunc_date AND area_type_id = 1;
        INSERT IGNORE INTO arc_area_time SELECT * FROM area_time WHERE exit_timestamp IS NOT NULL AND exit_timestamp < trunc_date;
        DELETE FROM area_time WHERE exit_timestamp IS NOT NULL AND exit_timestamp < trunc_date;
        INSERT IGNORE INTO arc_ed_sample_data SELECT * FROM ed_sample_data WHERE timestamp < trunc_date;
        DELETE FROM ed_sample_data WHERE timestamp < trunc_date;
    END//

    DELIMITER ;```


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...