mysql物化表(临时表)时,如果是多列的表子查询,依据哪些数据来创建哈希索引?
SELECT * FROM t1 WHERE (m1, n1) IN (SELECT m2, n2 FROM t2);
类似这样多列比较的表子查询,每行的哈希索引依据哪个值来创建?
个人推测,既然是仅用于这条语句的辅助用表,那就依照特定需要针对性的创建索引,也即m2和n2两列联合起来计算哈希值。而不是m2、n2分别各自,或者整行数据一起计算。
因为是学习中产生的疑问,但书上没有说得这么细,网上搜搜也没人提到这个,所以发个问题确认一下是不是与我推测的情形一致,如果推测不对也请告知,谢谢大家。
可以依据表中最常用的查询列来创建哈希索引。
可以尝试以表中最多查询列值作为键值,将查询记录存储在哈希表中。哈希索引可以提供速度最快的访问速度,而哈希表将所有记录存储在同一结构中,以快速响应查询,但是它可能会因为索引越来越大而变得慢。
例如,如果创建哈希索引时使用如下公式:
hash_table[key] = record;
其中,key 为要搜索的值,而 record 为查询结果。