我写了一个返回计数的查询。我的问题是,这是一个有效的查询吗?
attribute_value的类型为" longtext"并且最多可以有5个值。所有这些属性值都来自ENUM(5个不同的字符串)。这两个表都可以变长。 managed_channel可以包含百万条记录,managed_attribute可以包含10倍于managed_channel记录的大小
记住这一点,这个查询是否会有效运行,或者我可能必须使用其他技术(索引?)来提升性能。
SELECT COUNT(*) as mo_count
FROM managed_channel mo, managed_attribute ma
WHERE mo.id = ma.mo_id
AND mo.class_type = 3946
AND ma.attribute_type = 4293
AND ma.attribute_value IN ("ILLEGAL_MPS", "ILLEGAL_ID", "ILLEGAL_IP")
答案 0 :(得分:1)
您不想返回行,但要计算managed_channel。您必须使用索引文件的好处。
因此,您必须在允许外键工作的订单中对整个3列上的managed_attribute建立索引
ALTER TABLE managed_attribute ADD INDEX (attribute_type, attribute_value, mo_id);
和关于链
的managed_channel ALTER TABLE managed_channel ADD INDEX(mo_id, class_type);
此外,您应该只计算索引中的字段:
SELECT COUNT(mo.mo_id) ...
注意:我不明白为什么你将LONGTEXT用于看起来很短的领域。所以你宁愿采用VARCHAR或ENUM类型(抱歉没有理解那部分)