每晚删除的表上的Mysql索引

每晚删除的表上的Mysql索引,mysql,amazon-web-services,indexing,query-optimization,amazon-rds,Mysql,Amazon Web Services,Indexing,Query Optimization,Amazon Rds,我在AmazonRDS中使用mysql。我有以下结构的桌位预订: CREATE TABLE `booking` ( `id_by_customer` int(11) NOT NULL, `date` varchar(50) NOT NULL, `date_delivery` varchar(50) NOT NULL, `date_vat_effective` varchar(50) NOT NULL, `postingtext` varchar(50) NOT NU

我在AmazonRDS中使用mysql。我有以下结构的桌位预订:

CREATE TABLE `booking` (
   `id_by_customer` int(11) NOT NULL,
   `date` varchar(50) NOT NULL,
   `date_delivery` varchar(50) NOT NULL,
   `date_vat_effective` varchar(50) NOT NULL,
   `postingtext` varchar(50) NOT NULL,
   `amount` varchar(50) NOT NULL,
   `currency` varchar(50) NOT NULL,
   `vat` varchar(50) NOT NULL,
   `credit_type` varchar(50) NOT NULL,
   `debit_postingaccount_number` int(11) NOT NULL,
   `credit_postingaccount_number` int(11) NOT NULL,
   `tax_key` int(11) NOT NULL,
   `booking_number` double NOT NULL,
   `cost_location` varchar(50) NOT NULL,
   `circumstances_ll` varchar(50) NOT NULL,
   `transactions_purpose` varchar(150) NOT NULL,
   `receipts_assigned_invoice_numbers` varchar(50) NOT NULL,
   `receipts_assigned_counterparties` varchar(50) NOT NULL,
   `receipts_assigned_vat_rates` double NOT NULL,
   `receipts_assigned_assigned_amounts` varchar(50) NOT NULL,
   `receipts_assigned_assigned_dates` varchar(50) NOT NULL,
   `receipts_links` varchar(50) NOT NULL,
   `fixed` double NOT NULL,
   `comment` varchar(50) NOT NULL,
   `receipts_id_by_customer` varchar(50) NOT NULL,
   `transactions_id_by_customer` int(11) NOT NULL,
   PRIMARY KEY (`id_by_customer`),
   KEY `combined_index` (`debit_postingaccount_number`,`credit_type`,`credit_postingaccount_number`,`date`) USING BTREE
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
该表的行数少于10万行。每天晚上,我都从表中删除所有条目,然后再次插入它们。我有一个当前查询,它运行20分钟以获得输出。我想优化此查询我已为此创建了视图susa_列表:

CREATE 
    ALGORITHM = UNDEFINED 
    DEFINER = `admin`@`%` 
    SQL SECURITY DEFINER
VIEW `susa_list` AS
    (SELECT 
        `bookingOuter`.`debit_postingaccount_number` AS `account_id`,
        YEAR(`bookingOuter`.`date`) AS `booking_year`,
        (SELECT 
                SUM(`booking`.`amount`)
            FROM
                `booking`
            WHERE
                ((`booking`.`credit_type` = 'H')
                    AND (`booking`.`debit_postingaccount_number` = `bookingOuter`.`debit_postingaccount_number`)
                    AND (YEAR(`booking`.`date`) = YEAR(`bookingOuter`.`date`)))) AS `DEBIT_H`,
        (SELECT 
                SUM(`booking`.`amount`)
            FROM
                `booking`
            WHERE
                ((`booking`.`credit_type` = 'S')
                    AND (`booking`.`debit_postingaccount_number` = `bookingOuter`.`debit_postingaccount_number`)
                    AND (YEAR(`booking`.`date`) = YEAR(`bookingOuter`.`date`)))) AS `DEBIT_S`,
        (SELECT 
                SUM(`booking`.`amount`)
            FROM
                `booking`
            WHERE
                ((`booking`.`credit_type` = 'H')
                    AND (`booking`.`credit_postingaccount_number` = `bookingOuter`.`debit_postingaccount_number`)
                    AND (YEAR(`booking`.`date`) = YEAR(`bookingOuter`.`date`)))) AS `CREDIT_H`,
        (SELECT 
                SUM(`booking`.`amount`)
            FROM
                `booking`
            WHERE
                ((`booking`.`credit_type` = 'S')
                    AND (`booking`.`credit_postingaccount_number` = `bookingOuter`.`debit_postingaccount_number`)
                    AND (YEAR(`booking`.`date`) = YEAR(`bookingOuter`.`date`)))) AS `CREDIT_S`
    FROM
        `booking` `bookingOuter`
    GROUP BY `bookingOuter`.`debit_postingaccount_number` , `booking_year`)
我的目标是加快查询速度

从susa_列表中选择*

我应该每晚重建索引吗?数据只是一夜之间有一点变化,索引列上的值没有变化

我尝试创建自己的表susa_list_table,然后运行

create table susa_list_table as select * from susa_list
每天晚上。然而,这个查询已经非常慢,并且超时了正在进行导入的AWS Lambda Python

非常欢迎任何加快查询速度的建议!:-

哎哟

SUM(`booking`.`amount`)
`amount` varchar(50) NOT NULL,
请不要计算瓦查尔的总数;各种各样的恶行都可能发生

而且,这些价值可能是以不同的货币计算的吗

此外,还有一个日期数据类型。还有日期时间和时间戳

我很惊讶这个函数能工作

双??预订号码双不为空

如果存在区域设置问题,如千位分隔符和时区,请在插入表之前处理

每天晚上,我都从表中删除所有条目,然后再次插入它们

为什么

请提供解释选择。。。。这可能表明没有使用综合指数。它可能有助于将信用类型移到该索引的开头

在MySQL中,BTree索引不会降级。不要重新索引


视图可能可以用一个案例来编写,这样您只需执行1个选择,而不是5个选择。

我可以问一下为什么您要每晚删除并再次插入它们吗?不清楚-标题意味着从索引中删除,这是不可能的,文本中谈到删除表中的行。它还提到重建索引。请澄清。
`date` varchar(50) NOT NULL,
YEAR(`booking`.`date`)