每晚删除的表上的Mysql索引
我在AmazonRDS中使用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
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`)