我想征求意见,因为我做了一个更好的搜索。
我的服务器环境在下面。
H 210F 211这个表中大约有26万条记录(Kc_)。
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%或更多。
我期待着您的回音。
发布于 2019-12-20 10:33:50
首先,这个查询:
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);几十万行不是一个大数据集,我希望您的查询应该使用上面的索引快速运行。
发布于 2019-12-20 10:46:38
从kc_article选择count (1)作为cnt,其中w_status> 5和w_section2 = '68‘
发布于 2019-12-24 03:00:20
按照这个顺序,这个综合索引是您所需要的:
INDEX(w_secdion2, w_status)在构建索引时,从=子句开始。请参阅http://mysql.rjweb.org/doc.php/index_cookbook_mysql
https://stackoverflow.com/questions/59421967
复制相似问题