我有2个表,一个有100,000个数据记录,一个有"不感兴趣"
表"业务"有一个" BusinessID |大约10个其他信息栏
桌子"不感兴趣"有一个" BusinessID"和一个DateOfCall。目前我通过检查是否存在不感兴趣并且DateOfCall少于42天然后不在选择中显示来过滤掉数据。 (以下代码)。
SELECT * FROM businesses where PostCode like '" . $pcode . "%'
and BusinessType like '%$btype%'
and BusinessID NOT IN (SELECT BusinessID FROM telesales.notinterested WHERE NOW() BETWEEN DateOfCall and (DateOfCall + INTERVAL 42 DAY) )
and AppointmentDate is null
ORDER BY RAND() limit 100"
一开始很好,但现在"不感兴趣"有大约30,000条记录,它变得非常缓慢,特别是有一个字母的邮政编码。
我在bussinesses表中添加了一个名为" notinterested"我想在那里写一个约会。
从" notinterested"迁移DateOfCall的最简单方法是什么?表格进入"业务"?的新栏目我有点担心它的实时数据并且没有太多时间
答案 0 :(得分:2)
要回答原始问题,您可以运行此查询以更新添加的日期字段。
UPDATE businesses
INNER JOIN
(SELECT BusinessID, MAX(DateOfCall) maxdateofcall FROM telesales.notinterested WHERE NOW() BETWEEN DateOfCall AND (DateOfCall + INTERVAL 42 DAY) GROUP BY BusinessID) recentnotinterested
ON businesses.BusinessID = recentnotinterested.BusinessID
SET businesses.notinterested = recentnotinterested.maxdateofcall;
答案 1 :(得分:1)
做了一个款待,谢谢。还是有点慢。
编辑:没有好处,但它好一点。
SELECT * FROM businesses where PostCode like '" . $pcode . "%'
and BusinessType like '%$btype%'
and NOT EXISTS (SELECT b.BusinessID FROM businesses b
left join telesales.notinterested ni on ni.BusinessID = b.BusinessID
WHERE (ni.DateOfCall > NOW() + INTERVAL 42 DAY))
and AppointmentDate is null
LIMIT 200