【发布时间】:2011-12-03 04:04:10
【问题描述】:
我目前正在评估存储供应商目录的策略。 目录中可以有多个项目,从 100 到 25 万不等。 每个项目可能有多个错误。应用程序应该支持目录项的浏览
- 按错误类型、类别、制造商、供应商等分组。
- 浏览任何组的项目,应该能够在多个列上排序和搜索(partid, 名称、价格等)
问题是当我必须提供“多重搜索和排序和分组”功能时,我应该如何创建索引。
根据 mysql doc & blogs for index,似乎并非所有查询都使用在单个列上创建索引。
创建多列索引甚至不是针对我的情况。
组搜索和排序可能有 20 - 30 种组合。
我如何扩展以及如何使搜索快速。
预计处理 5000 万条数据记录。
目前正在评估 1500 万条数据。
欢迎提出建议。
CREATE TABLE CATALOG_ITEM
(
AUTO_ID BIGINT PRIMARY KEY AUTO_INCREMENT,
TENANT_ID VARCHAR(40) NOT NULL,
CATALOG_ID VARCHAR(40) NOT NULL,
CATALOG_VERSION INT NOT NULL,
ITEM_ID VARCHAR(40) NOT NULL,
VERSION INT NOT NULL,
NAME VARCHAR(250) NOT NULL,
DESCRIPTION VARCHAR(2000) NOT NULL,
CURRENCY VARCHAR(5) NOT NULL,
PRICE DOUBLE NOT NULL,
UOM VARCHAR(10) NOT NULL,
LEAD_TIME INT DEFAULT 0,
SUPPLIER_ID VARCHAR(40) NOT NULL,
SUPPLIER_NAME VARCHAR(100) NOT NULL,
SUPPLIER_PART_ID VARCHAR(40) NOT NULL,
MANUFACTURER_PART_ID VARCHAR(40),
MANUFACTURER_NAME VARCHAR(100),
CATEGORY_CODE VARCHAR(40) NOT NULL,
CATEGORY_NAME VARCHAR(100) NOT NULL,
SOURCE_TYPE INT DEFAULT 0,
ACTIVE BOOLEAN,
SUPPLIER_PRODUCT_URL VARCHAR(250),
MANUFACTURER_PRODUCT_URL VARCHAR(250),
IMAGE_URL VARCHAR(250),
THUMBNAIL_URL VARCHAR(250),
UNIQUE(TENANT_ID,ITEM_ID,VERSION),
UNIQUE(TENANT_ID,CATALOG_ID,ITEM_ID)
);
CREATE TABLE CATALOG_ITEM_ERROR
(
ITEM_REF BIGINT,
FIELD VARCHAR(40) NOT NULL,
ERROR_TYPE INT NOT NULL,
ERROR_VALUE VARCHAR(2000)
);
【问题讨论】:
-
我认为我们需要 db 架构来回答这个问题。
-
从一开始就使用狮身人面像
标签: mysql indexing query-optimization scalability