【发布时间】:2018-12-03 14:30:57
【问题描述】:
我想对跨 sql 表设置复合索引做一点说明。有人可以告诉我是否至少可以使用 h2 数据库?
示例:我有 2 个表格、类别和客户。每个类别都有很多客户。因此,要求是允许一个客户只购买每个类别中的产品 [或者换句话说,每个类别的 customer_id 必须是唯一的]。但是有数百万条记录,所以下面的查询(检查唯一性)不是很有效。
SELECT COUNT(*)
FROM CATEGORIES c
INNER JOIN CUSTOMER ct
on c.CUSTOMER_ID=ct.id
WHERE c.id = '1' AND ct.EMAIL='joe@xzy.com'
处理需要几秒钟。所以问题是,是否可以为这两个表创建索引,如下所示?
CREATE INDEX "TEST" ON "CATEGORY" ("CUSTOMER_ID") and "CUSTOMER" ON CUSTOMER("EMAIL)
分类
| id | categoryname | CUSTOMER_ID |
+----+---------+---------+--------------
| 1 | electronics | 1 |
| 2 | food | 2 |
客户
| id | name | city | EMAIL
+----+------------------+-------
| 1 | Joe | Newyork | joe@xyz.com
| 2 | Ross | Washington| ross@xzy.com
| .. | .... | ..... |
【问题讨论】:
-
索引 ct.email、ct.id 的顺序
-
据我所知,您无法为多个表创建索引,但您可以生成
View并根据需要为View建立索引。