【发布时间】:2012-12-28 09:50:30
【问题描述】:
我正在开发一个数据库,它是一个相当大的数据库,有 13 亿行和大约 35 列。这是我检查表状态后得到的结果:
Name:Table Name
Engine:InnoDB
Version:10
Row_format:Compact
Rows:12853961
Avg_row_length:572
Data_length:7353663488
Max_data_length:0
Index_length:5877268480
Data_free:0
Auto_increment:12933138
Create_time:41271.0312615741
Update_time:NULL
Check_time:NULL
Collation:utf8_general_ci
Checksum:NULL
Create_options:
Comment:InnoDB free: 11489280 kB
我面临的问题是,即使是单个选择查询也需要花费太多时间来处理,例如查询 Select * from Table_Name limit 0,50000 大约需要 2.48 分钟
这是预期的吗?
我必须制作一份报告,其中我必须使用整个历史数据,即整个 13 亿行。我可以逐批执行此操作,但随后我将不得不一次又一次地运行花费太多时间的查询。
当简单查询花费这么多时间时,我无法执行任何其他需要连接和案例语句的复杂查询。
【问题讨论】:
-
我们可以看看您的数据库架构吗?运行
DESC Table\ Name -
在表中添加索引,在 where 子句中使用索引列。
-
不要使用 * 进行选择,只提取您想要的列。
-
我不确定 mysql 配置,但为了获得更快的 sql 查询运行解释计划 - 查看所有成本和内存在哪里。贴在这里,我们会告诉你如何让sql查询更快
-
在您的表上尝试范围分区。不会影响您的数据。可能会提高您的表现
标签: mysql database performance query-optimization reporting