Php Mysql-数据库中的数据太多
我有两个数据库表-products&product_x_category和products表有150000行,product_x_category可能有145000行 处理数据库中这么多数据的最佳方法是什么 例如,我尝试从任何类别中都不包含的数据库项目中删除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秒+-或仅
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),谢谢,太好了。问题出在外键上。谢谢,太好了。问题出在外键上。