gpt4 book ai didi

mysql - select count(*) 查询太慢。我猜索引是行不通的

转载 作者:行者123 更新时间:2023-11-29 09:27:00 25 4
gpt4 key购买 nike

我想请求评论,因为我做了更好的搜索。

我的服务器环境如下。

  • CentOS 版本 5.1
  • Linux 2.6,18
  • CPU:Intel (R) Xeon (R) CPU E3-1230 v3 @ 3.30GHz 8 核
  • 内存:8 GB
  • MySQL v5.5.40

此表 (kc_article-MyISAM) 中约有 260,000 条记录。

 mysql> desc kc_article;

+ --------------------- + ---------------------- + ---- -+ ----- + --------------------- + ---------------- +

| Field | Type | Null | Key | Default | Extra |

+ --------------------- + ---------------------- + ---- -+ ----- + --------------------- + ---------------- +

| idx | int (11) | NO | PRI | NULL | auto_increment |

| w_status | tinyint (4) | NO | MUL | 1 | |

| w_subj | varchar (255) | NO | MUL | NULL | |

~~ omission ~~

| w_section1 | int (11) | NO | MUL | NULL | |

| w_section2 | int (11) | NO | MUL | NULL | |

| w_theme | int (11) | NO | MUL | NULL | |

~~ Lay ~~

即使在查询条件中创建了索引,速度有时也会超过1、2、10、20秒。w_status 和 w_section2 均已编入索引。

mysql> explain select count (*) as cnt from kc_article
where w_status> 5
and (w_section2 = '68')

+ ---- + ------------- + ------------ + ------ + ---------- ----------- + ------------ + --------- + ------- + ------- + ------------- +

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+ ---- + ------------- + ------------ + ------ + ---------- ----------- + ------------ + --------- + ------- + ------- + ------------- +

| 1 | SIMPLE | kc_article | ref | w_section2, w_status | w_section2 | 4 | const | 33548 | Using where |

+ ---- + ------------- + ------------ + ------ + ---------- ----------- + ------------ + --------- + ------- + ------- + ------------- +

检查、恢复和优化表以及删除索引后重新创建表也是如此。w_status的取值为0~6之间的整数,其中6为95%以上。

期待您的回复。

最佳答案

首先,这个查询:

select count (*) as cnt from kc_article where w_status> 5 and (w_section2 = '68')

应该写成:

select count (*) as cnt from kc_article where w_status =  and w_section2 = 68

括号是多余的,并且由于 w_section2 是一个整数,因此应该与整数而不是字符串进行比较。此外,w_status 的范围为 0 到 6,因此您可以使用相等条件而不是不等式。

您提到w_status 和 w_section2 都已编入索引。对于此查询,您需要在两列上建立复合索引,而不是在每列上建立索引(否则,MySQL 无法同时使用两者)。如果不存在,则创建它:

create index kc_article_status_section_idx on kc_article(w_status, w_section2);

几十万行并不是一个大数据集,我希望您的查询应该使用上述索引运行得很快。

关于mysql - select count(*) 查询太慢。我猜索引是行不通的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59421967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com