PHP“;简单的;查询需要大量时间
我有一个关于性能的问题,我想我做错了什么 我有一个表与项目,另一个与类别,任何项目可以在多个类别。现在我想显示所有不包含在任何类别中的项目 连接在表PHP“;简单的;查询需要大量时间,php,mysql,sql,database,Php,Mysql,Sql,Database,我有一个关于性能的问题,我想我做错了什么 我有一个表与项目,另一个与类别,任何项目可以在多个类别。现在我想显示所有不包含在任何类别中的项目 连接在表Items\u Categories中(仅限于ID\u item和ID\u Categories) 我提出这个问题: SELECT * FROM Items AS i WHERE ID_item NOT IN ( SELECT DISTINCT ID_item FROM Items_Categories ) 它能工作,但速度很慢。
Items\u Categories
中(仅限于ID\u item
和ID\u Categories
)
我提出这个问题:
SELECT *
FROM Items AS i
WHERE ID_item NOT
IN (
SELECT DISTINCT ID_item
FROM Items_Categories
)
它能工作,但速度很慢。这需要几秒钟的时间,我的数据库并没有那么大。我有大约3000种商品,大概200种
有更好的解决方案吗?您可能可以使用联接来代替,并找到没有任何匹配项的联接
SELECT i.*
FROM items i
LEFT JOIN Items_Categories ic
ON i.ID_item = ic.ID_Item
WHERE
ic.ID_Item IS NULL
您可能可以使用联接来查找不匹配的联接
SELECT i.*
FROM items i
LEFT JOIN Items_Categories ic
ON i.ID_item = ic.ID_Item
WHERE
ic.ID_Item IS NULL
您可能可以使用联接来查找不匹配的联接
SELECT i.*
FROM items i
LEFT JOIN Items_Categories ic
ON i.ID_item = ic.ID_Item
WHERE
ic.ID_Item IS NULL
您可能可以使用联接来查找不匹配的联接
SELECT i.*
FROM items i
LEFT JOIN Items_Categories ic
ON i.ID_item = ic.ID_Item
WHERE
ic.ID_Item IS NULL
试着这样做:
SELECT i.*
FROM Items AS i
LEFT JOIN Items_Categories IC on IC.ID_item = I.ID_item
where IC.ID_item is null
试着这样做:
SELECT i.*
FROM Items AS i
LEFT JOIN Items_Categories IC on IC.ID_item = I.ID_item
where IC.ID_item is null
试着这样做:
SELECT i.*
FROM Items AS i
LEFT JOIN Items_Categories IC on IC.ID_item = I.ID_item
where IC.ID_item is null
试着这样做:
SELECT i.*
FROM Items AS i
LEFT JOIN Items_Categories IC on IC.ID_item = I.ID_item
where IC.ID_item is null
您可以采用这种方法,按照Mark Baker的建议,通过解释检查您和我的执行计划:
SELECT
*
FROM
Items i
WHERE NOT EXISTS (
SELECT 1 FROM Items_Categories WHERE ID_item = i.ID_item
);
当然,您应该在两个表中都为ID_item列编制索引。您可以采用这种方法,通过解释检查您和我的执行计划,正如Mark Baker建议的那样:
SELECT
*
FROM
Items i
WHERE NOT EXISTS (
SELECT 1 FROM Items_Categories WHERE ID_item = i.ID_item
);
当然,您应该在两个表中都为ID_item列编制索引。您可以采用这种方法,通过解释检查您和我的执行计划,正如Mark Baker建议的那样:
SELECT
*
FROM
Items i
WHERE NOT EXISTS (
SELECT 1 FROM Items_Categories WHERE ID_item = i.ID_item
);
当然,您应该在两个表中都为ID_item列编制索引。您可以采用这种方法,通过解释检查您和我的执行计划,正如Mark Baker建议的那样:
SELECT
*
FROM
Items i
WHERE NOT EXISTS (
SELECT 1 FROM Items_Categories WHERE ID_item = i.ID_item
);
当然,您应该为两个表中的ID\u item列编制索引。您需要选择所有内容吗?如果不仅选择所需的列,还可以告诉我们这些表上有哪些索引,以及查询解释的结果显示了什么,从而加快查询启动速度。是否需要选择所有内容?如果不仅选择所需的列,还可以告诉我们这些表上有哪些索引,以及查询解释的结果显示了什么,从而加快查询启动速度。是否需要选择所有内容?如果不仅选择所需的列,还可以告诉我们这些表上有哪些索引,以及查询解释的结果显示了什么,从而加快查询启动速度。是否需要选择所有内容?如果不仅选择所需的列,还可以告诉我们这些表上有哪些索引,以及查询解释的结果显示了什么,从而加快查询启动速度。这将返回带有类别的项,还将返回那些没有包含所有类别的项。@VMai谢谢!Iv'e更改了它这也将返回带有类别的项目,它将返回那些没有包含所有类别的项目。@VMai谢谢!Iv'e更改了它这也将返回带有类别的项目,它将返回那些没有包含所有类别的项目。@VMai谢谢!Iv'e更改了它这也将返回带有类别的项目,它将返回那些没有包含所有类别的项目。@VMai谢谢!我改变了它