我想知道在同一时间搜索多个列的最佳方法是什么,这是在大型数据库上。
例如,我有一个包含400k记录的表,我想与另一个具有1000k记录的表执行交集。
目前我正在做这样的事情:
alter table t1 add column (hash varbinary(32));
update t1 set hash = md5(concat(col1, col2, col3));
alter table t1 add index (hash);
然后我执行查询,加入,使用散列列...
select * from t1 where t1.hash not in (select t2.hash from t2);
有没有人有类似的经历,或使用其他技巧或其他可能有趣的分享?
答案 0 :(得分:0)
你看过Apache Solr项目了吗?我没有在MySQL上使用它,但过去曾在一个与Microsoft SQL Server一起使用它的项目上工作过。它对于复杂查询非常有用。
答案 1 :(得分:0)
如果col1, col2, col3
在两个表中具有相同的数据类型且存在索引(更好的群集),则此解决方案不会带来太多性能提升。
存储int
列会更便宜,列的所有组合都会编号。
我认为您的表结构和查询有更多的空间需要改进以获得“交集”。