mysql - 查询MySQL中的大表

标签 mysql performance select query-optimization

我有一个大约有 100 万行的表(物理磁盘上的大小接近 8 GB,因为它有一个文本列),任何事务都需要花费大量时间。特别是对于“选择”,需要花费大量时间,例如没有任何条件的计数查询大约需要 20 分钟,即 select count(*) from TestPerformance

表架构为:

名称:测试性能

Field       Type    Null    Key     Default     Extra

ID      int(11)     NO  PRI     null    
TEXT        text        YES         null    
CATEGORY    varchar(100)    YES     MUL     null    
DDOMAIN     varchar(100)    YES         null    
NETWORK     varchar(100)    YES         null    
NODE        varchar(100)    YES         null    
ENTITY      varchar(100)    YES     MUL     null    
SEVERITY    int(11)     YES         null    
TTIME       bigint(20)  YES         null    
SOURCE      varchar(255)    NO  MUL     null    
HELPURL     varchar(100)    YES         null    
WEBNMS      varchar(100)    YES         null    
GROUPNAME   varchar(100)    YES         null    
OWNERNAME   varchar(25)     NO  PRI     null      

索引是

Table           Non_unique  Key_name        Seq_in_index    Column_name     
TestPerformance     0       PRIMARY         1       ID      
TestPerformance     0       PRIMARY         2       OWNERNAME   
TestPerformance     1       TestPerformance0_ndx    1       ID      
TestPerformance     1       TestPerformance1_ndx    1       OWNERNAME   
TestPerformance     1       TestPerformance_ndx     1       CATEGORY    
TestPerformance     1       TestPerformance_ndx     2       SOURCE      
TestPerformance     1       TestPerformance_ndx1    1       ENTITY      
TestPerformance     1       TestPerformance_ndx2    1       SOURCE  

我已将 key_buffer 大小调整为 1 GB,但性能没有任何变化。

如何在不删除任何数据的情况下加快该表的交易速度?

我不是数据库专家。请提供您的建议以改进表的性能。

最佳答案

How can I speed up transaction of this table without deleting any data?

100 万行并不是很多数据。 8Gb 是一个相当大的数据量。

将文本类型列移至单独的表中(具有 1:1 关系)。将这些 varchar 表的大小减少到保存数据所需的最小大小(或考虑将过滤不需要的任何内容移至另一个表)。

您真的需要 id 主键所有者名称吗?我怀疑 id 可能是唯一的。如果是这样,则丢失 TestPerformance0_ndx - 这是多余的。事实上,您应该开始分析日志并查看 DBMS 实际需要哪些索引来服务查询并相应地修改架构

关于mysql - 查询MySQL中的大表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8383583/

相关文章:

mysql - 存储过程问题,在本地运行但不在服务器上运行

sql - 更改没有主键的表中的每条记录?

mysql - 同一个表中的 char 和 varchar

ios - 解析日期时的性能问题

PHP 脚本使服务器过载

performance - 使两个直方图成比例的算法,最小化了删除的单位

sql - 如何为 psql 添加内部查询

SQL - 两列不同,第三列汇总值

MySQL子查询问题

javascript - Angular 多选