Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql-数据库中的数据太多_Php_Mysql_Sql - Fatal编程技术网

Php Mysql-数据库中的数据太多

Php Mysql-数据库中的数据太多,php,mysql,sql,Php,Mysql,Sql,我有两个数据库表-products&product_x_category和products表有150000行,product_x_category可能有145000行 处理数据库中这么多数据的最佳方法是什么 例如,我尝试从任何类别中都不包含的数据库项目中删除 SELECT * FROM products where id NOT IN(SELECT product_id FROM product_x_category); 还有我知道的其他方法…-组连接、连接等,但所有查询都太长(20秒+-或仅

我有两个数据库表-products&product_x_category和products表有150000行,product_x_category可能有145000行

处理数据库中这么多数据的最佳方法是什么

例如,我尝试从任何类别中都不包含的数据库项目中删除

SELECT * FROM products where id NOT IN(SELECT product_id FROM product_x_category);
还有我知道的其他方法…-组连接、连接等,但所有查询都太长(20秒+-或仅db超时)


有人能告诉我怎么做吗?谢谢

不存在
有时比
不存在
的性能更好。而且,当子查询具有
NULL
值时,它的性能更好。所以,要习惯写作:

SELECT p.*
FROM products p 
WHERE NOT EXISTS (SELECT 1 FROM product_x_category pxc WHERE pxc.id = p.product_id);
其次,您需要在
product\u x\u category(product\u id)
上为该查询创建索引

最后,添加一个外键约束,以便产品在
product\u x\u category
表中是正确的:

alter table product_x_category add constraint fk_pxc_product_id foreign key (product_id) references products(id);
这样,您只能在表中输入正确的产品(并且您希望该类别有类似的产品)


注意:如果数据不一致,将其添加到已有数据的表中可能会有问题。

不存在
有时比
不在
中的性能更好。而且,当子查询具有
NULL
值时,它的性能更好。所以,要习惯写作:

SELECT p.*
FROM products p 
WHERE NOT EXISTS (SELECT 1 FROM product_x_category pxc WHERE pxc.id = p.product_id);
select a.* from products a left join product_x_category b 
on a.id = b.product_id where b.product_id is NULL
其次,您需要在
product\u x\u category(product\u id)
上为该查询创建索引

最后,添加一个外键约束,以便产品在
product\u x\u category
表中是正确的:

alter table product_x_category add constraint fk_pxc_product_id foreign key (product_id) references products(id);
这样,您只能在表中输入正确的产品(并且您希望该类别有类似的产品)

注意:如果数据不一致,将其添加到已有数据的表中可能会出现问题

select a.* from products a left join product_x_category b 
on a.id = b.product_id where b.product_id is NULL

这将为您提供产品类别中不存在的记录


这将为您提供产品类别中不存在的记录

150000行实际上并不多。检查查询(解释)、索引等150K行并不多。这肯定是不够的信息,但我的第一反应是使用
explain[将您的查询放在这里]
查看哪种类型的查询有助于加快查询速度。如前所述,就现代计算能力而言,这并不是很多数据。实际上,150000行并不是很多。检查查询(解释)、索引等。150K行并不多。这肯定是不够的信息,但我的第一反应是使用
explain[把你的查询放在这里]
查看哪种类型的查询有助于加快查询速度。如前所述,就现代计算能力而言,这并不是很多数据。您只需在此处选择
a.*
,并在where子句中输入b.product\u id为NULL,因为它可能无法在查询的
部分工作。谢谢您,先生,我的或@Gordon Linoff的查询持续了大约0.8s,而这个查询持续了大约0.08(y),您只需要在这里选择
a.*
,还需要在where子句中输入b.product\u id为空,因为它可能无法在查询的
部分工作。谢谢先生,我或@Gordon Linoff的查询持续了大约0.8秒,而这个查询持续了大约0.08秒(y),谢谢,太好了。问题出在外键上。谢谢,太好了。问题出在外键上。