mysql - SQL大查询优化

标签 mysql sql

我有以下查询:

SELECT `Product_has_ProductFeature`.`productId`, `Product_has_ProductFeature`.`productFeatureId`, `Product_has_ProductFeature`.`productFeatureValueId`
FROM `Product_has_ProductFeature`
WHERE `productId` IN (...'18815', '18816', '18817', '18818', '18819', '18820', '18821', '18822', '18823', '18824', '18825', '18826', '18827', '18828', '18829', '18830', '18831', '18832', '18833', '18834'..)

我有大约 50000 个产品 ID。执行时间为 20 秒。我怎样才能让它更快?

最佳答案

这更像是一条评论。

返回 50,000 行可能需要一些时间,具体取决于您的应用程序、行大小、网络以及服务器的繁忙程度。

进行比较时,应确保值具有相同类型。因此,如果 productId 是数字,则删除单引号。

如果值都是连续的,则避开列表,只需执行以下操作:

where productid >= 18815 and productid <= 18834

最后,通常建议在 productid 上建立索引。然而,在某些情况下,索引可能会使性能变差。这取决于数据的大小以及可用于页面和数据缓存的内存大小。

MySQL 高效地实现了in(使用二叉树)。大部分开销可能是编译查询而不是执行查询。如果表中有值,连接可能会更有效。

关于mysql - SQL大查询优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32500583/

相关文章:

php - Json 数组不将值存入数据库

使用输出重定向 (<) 管道进行 MySQL 转储导入的 Python Sh 库

php - Cookie 在本地工作,但不能在线 PHP MYSQL

c# - 输入流格式不正确

mysql - 具有多列查找的主键

Mysql 在两个表之间进行选择,不限制记录是否出现在连接表上

java - 将 mysql 日期解析为 ZonedDateTime

MySQL:根据不同的列减去不同的行

sql - 寻找补充日期范围?

SQL标准转义列名?