gpt4 book ai didi

php - 使用 WHERE 子句加速 MySQL (MyISAM) 计数

转载 作者:可可西里 更新时间:2023-11-01 07:19:02 24 4
gpt4 key购买 nike

我们正在实现一个分析书籍的系统。该系统是用 PHP 编写的,对于每本书,循环遍历单词并分析每个单词,设置来自各种正则表达式和其他测试的某些标志(转换为数据库字段)。

这会生成一个 matches 表,类似于下面的示例:

+------------------------+--------------+------+-----+---------+----------------+| Field                  | Type         | Null | Key | Default | Extra          |+------------------------+--------------+------+-----+---------+----------------+| id                     | bigint(20)   | NO   | PRI | NULL    | auto_increment || regex                  | varchar(250) | YES  |     | NULL    |                || description            | varchar(250) | NO   |     | NULL    |                || phonic_description     | varchar(255) | NO   |     | NULL    |                || is_high_frequency      | tinyint(1)   | NO   |     | NULL    |                || is_readable            | tinyint(1)   | NO   |     | NULL    |                || book_id                | bigint(20)   | YES  |     | NULL    |                || matched_regex          | varchar(255) | YES  |     | NULL    |                || [...]                  |              |      |     |         |                |+------------------------+--------------+------+-----+---------+----------------+

Most of the omitted fields are tinyint, either 0 or 1. There are currently 25 fields in the matches table.

There are ~2,000,000 rows in the matches table, the output of analyzing ~500 books.

Currently, there is a "reports" area of the site which queries the matches table like this:

SELECT COUNT(*)
FROM matches
WHERE is_readable = 1
AND other_flag = 0
AND another_flag = 1

但是,目前每次查询大约需要 0.7 秒,因此获取主索引报告需要一分钟多的时间。我在查询级别缓存它,但初始页面加载仍然需要很长时间。

由于我在如何管理此类数据集方面不是很有经验,谁能建议我更好的方法来存储或查询这些数据?是否有任何优化可以用于 MySQL 来提高这些 COUNT 的性能,或者我最好还是使用其他数据库或数据结构?

我们目前正在使用带有 MyISAM 表的 MySQL 和一个 VPS,因此完全切换到一个新的数据库系统并不是不可能的。

最佳答案

您需要使用索引,在您最常执行 WHERE 操作的列上创建它们。

ALTER TABLE `matches` ADD INDEX ( `is_readable` ) 

等..

您还可以基于多列创建索引,如果您反复执行相同类型的查询很有用。 phpMyAdmin 在底部表格的结构页面上有索引选项。

关于php - 使用 WHERE 子句加速 MySQL (MyISAM) 计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8928214/

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