php - 使用索引改进 MySQL 表

标签 php mysql optimization indexing

我对 MySQL 中的索引非常陌生。我知道,我可能应该早点知道,但大多数项目都足够小,我可以不用它;)

所以,现在我正在测试它。我通过在查询上运行 EXPLAIN 进行了测试:

查询:

EXPLAIN SELECT a . *
FROM `tff__keywords2data` AS a
LEFT JOIN `tff__keywords` AS b ON a.keyword_id = b.id
WHERE (
b.keyword = 'dog' || b.keyword = 'black' || b.keyword = 'and' || b.keyword = 'white'
)
GROUP BY a.data_id
HAVING COUNT( a.data_id ) =4 

首先,没有索引我得到了这些结果:

enter image description here

然后,通过 data_id 和 keyword_id 的索引,我得到了这个:

enter image description here

据我了解,MySQL 必须搜索的行数从 61k 下降到 10k,这一定不错吧?

所以我的问题是,我在这里正确吗?在尝试优化时还有什么我可以考虑的吗?

更新:

此外,在 AJ 和 Piskvor 的帮助指出我的另一个表及其列关键字没有索引后,我得到了这个:

enter image description here

进步很大!对吧?

最佳答案

如您所见,用于表 bkey 仍然是 NULL。您可能想在 b.keyword 上添加索引并匹配

WHERE b.keyword IN ('dog','black','and','white')

这在功能上与您的 WHERE 子句不同,尽管它返回相同的结果。

看起来,您可能对全文搜索感兴趣。

关于php - 使用索引改进 MySQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5717797/

相关文章:

php - 服务器端之后的 Bootstrap Validator

PHP 和 MySQL 在哪里和

mysql - 从字符串转换日期和/或时间时转换失败。 - 错误

sql - 延迟作业批量插入

php - 如果字段不为空,如何显示带有标题的表格一次,后跟多个数据库字段内容?

php - 文件下载后网站无响应。我做错了什么?

MySQL:按条件分组和聚合函数

php - 无法将数据从数据库显示到表

c# - StringBuilder ToString() 性能

sql - Handler_read_rnd_next 的危险数字(或增长率)是多少?