检查问题此SELECT查询需要180秒才能完成(检查问题本身的注释).
IN只能与一个值进行比较,但时差仍然很大.
为什么会那样?
我有一个由PHP脚本生成的MySQL查询,查询将如下所示:
SELECT * FROM Recipe_Data WHERE 404_Without_200 = 0 AND Failures_Without_Success = 0 AND RHD_No IN (10, 24, 34, 41, 43, 51, 57, 59, 61, 67, 84, 90, 272, 324, 402, 405, 414, 498, 500, 501, 510, 559, 562, 595, 632, 634, 640, 643, 647, 651, 703, 714, 719, 762, 765, 776, 796, 812, 814, 815, 822, 848, 853, 855, 858, 866, 891, 920, 947, 956, 962, 968, 1049, 1054, 1064, 1065, 1070, 1100, 1113, 1119, 1130, 1262, 1287, 1292, …Run Code Online (Sandbox Code Playgroud) 使用bind_param我的所有查询,我现在想要使用IN(?)列表中元素数量可以变化的位置.
我在这里使用基本SQLOUT功能做了$sql_db->prepare,->bind_param,->execute(),->store_result(),->bind_result
// the code below does not work as the query only matches on element 'a':
$locations = ('a','b','c','d','e');
SQLout ("SELECT Name FROM Users WHERE Locations IN (?)",
array('s', $locations), array(&$usrName));
// the code below does work as a brute-force method,
// but is not a viable solution as I can't anticipate the number of elements in $locations going forward:
SQLout ("SELECT Name FROM Users WHERE …Run Code Online (Sandbox Code Playgroud) SELECT C.* FROM StockToCategory STC
INNER JOIN Category C ON STC.CategoryID = C.CategoryID
WHERE STC.StockID = @StockID
Run Code Online (Sandbox Code Playgroud)
VS
SELECT * FROM Category
WHERE CategoryID IN
(SELECT CategoryID FROM StockToCategory WHERE StockID = @StockID)
Run Code Online (Sandbox Code Playgroud)
这被认为是正确的(语法上)和最高效的方法,为什么?
后一个例子中的语法对我来说似乎更合乎逻辑,但我的假设是JOIN会更快.
我查看了查询计划,但无法从中解析任何内容.