首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySQL中查询大表

在MySQL中查询大表
EN

Stack Overflow用户
提问于 2011-12-05 17:57:23
回答 2查看 224关注 0票数 2

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

表模式为:

姓名: TestPerformance

代码语言:javascript
复制
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      

和索引是

代码语言:javascript
复制
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,但在性能上没有任何变化。

如何在不删除任何数据的情况下加快此表的处理速度?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-05 18:51:09

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

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

将文本类型列移动到sperate表中(关系为1:1 )。将那些varchar表的大小减少到保存数据所需的最小大小(或者考虑将过滤时不需要的数据移动到其他表)。

你真的需要id和ownername作为主键吗?我怀疑id可能是唯一的。如果是这样的话,丢掉TestPerformance0_ndx -它是多余的。实际上,您应该开始分析您的日志,看看DBMS实际需要哪些索引来服务于查询,并相应地修改模式

票数 3
EN

Stack Overflow用户

发布于 2011-12-05 18:08:48

对您的查询运行EXPLAIN (您应该发布给我们以供我们查看)。这将有助于确定您的查询试图使用哪些索引,以及哪些列正在使用全表扫描。

此外,不要选择count *,而是计算您的主recid,这样它就可以使用您的索引进行计数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8383583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档