mysql - 具有多个连接的 MySQL 查询在 React js App 中性能缓慢
问题描述
在调用表之前我只有一张表user
,所有值都是硬编码的。查询曾经更快。
这是我以前的桌子的样子:
id username religion caste gender
1 abc Christian catholic Male
2 ahh Hindu caste 27 Female
3 hhh Muslim caste 73 Female
现在我有宗教和种姓的单独表格,如下所示,查询需要更长的时间。我有以下表格:
用户
id username religion caste gender
1 abc 1 1 Male
2 ahh 2 27 Female
3 hhh 3 73 Female
options_religion
rel_id religion
1 Christian
2 Hindu
3 Muslim
4 Buddhist
.....
options_caste
cas_id caste
1 catholic
2 orthodox
3 caste 3
4 caste 4
....
我有一个查询,可以选择用户并使用 LEFT JOIN 获取他们的宗教和种姓。
const findProfilesWithFilter = await db.query(
`SELECT users.id, users.username, users.gender,
options_religion.religion, options_caste.caste
FROM users
LEFT JOIN options_religion ON users.religion = options_religion.rel_id
LEFT JOIN options_caste ON users.caste = options_caste.cas_id
WHERE
users.${language} = ${db.escape(l)} AND
users.${religion} LIKE ${db.escape(r)} AND
users.${gender} LIKE ${db.escape(g)}
ORDER BY users.id DESC LIMIT 500 OFFSET 0`
)
上面的查询有效,我得到了返回的宗教和种姓,但它比我的用户表中的简单硬编码值慢得多。
- 我的查询不好吗?
- 将所有值硬编码在
users
表中是一个更好的主意吗?我试图节省大小。 - 如何提高查询的性能?
我在我的 reactjs 应用程序中使用它。MYSQL 是数据库。
解决方案
这些是您可以在查询中实施以提高性能的一些改进:
- 确保您的附加表
options_religion
有options_caste
一个索引(可能是 PRIMARY 索引)rel_id
并cas_id
优化连接。 - 如果您使用全名进行过滤,请避免使用 LIKE,这将更好地
=
用于索引性能。否则,您需要在该字段上建立一个索引以实现子串搜索性能。 - 如果您想使用宗教名称(而不是 id)进行过滤,请使用新表
options_religion
而不是users
(请记住 user 中的宗教现在是整数)。此外,如果您计划使用任何其他表进行过滤,您可以将连接更改为 INNER JOIN。 - 字段 users.gender 可能有数量有限的值,如果您使用 equals 和整个单词值“男性”、“女性”等进行过滤,效率会更高。
- 通常,当您遇到一些性能问题时,您可以执行 SQL 查询的“EXPLAIN”(使用文字值而不是变量)
EXPLAIN SELECT users.id, users.username, users.gender, ...
:此解释的结果告诉您查询中涉及多少行。如果您在“行”中看到多行具有大数字,则可能需要一些额外的索引。
另外,为了确保不是前端问题(显示的行数过多,带宽),请尝试直接在数据库控制台或客户端中测试您的查询,并检查查询时间。
推荐阅读
- html - 左侧文本,右侧图标 - Bootstrap
- linux - 为什么“head -n”在被传送到两个回显命令后不工作?
- javascript - JavaScript - 改进根据单个条件返回值的递归循环
- java - 如何在 Java 中使用结果列表本身的属性来过滤目录列表?
- python - Python 魔杖制作巨大的临时文件
- javascript - Axios GET 和 jQuery getJson 对于相同的逻辑工作方式不同
- java - 需要一些帮助调试这个java
- c - Linux C 编程内存完整地址清理程序错误
- c# - 模型绑定流实例
- mysql - App Engine for django 项目上的 Cloud sql 连接问题