一个数据表,现有200,000数据,今后会陆续增加到300,000 - 400,000条。现在要记录每一个产品的分类(总计有600-700种,但单一产品最多不超过8个分类),类似这样的数据表如何设计?
这个数据库的主要功能是:随时根据不同分类,将该类的所有产品从数据库里检索出来,附加功能是根据产品名检索。本人知识有限,初步设想如下,分类用数字代替,另有一个副表做参照。比如101代表运动鞋,202代表女鞋,305代表红色的鞋子,401代表nike,501代表美国... 把分类写进一个数据列里(porduct_list [varchar(32)])id | porduct_list
1 | 101 201 305
2 | 101 202
3 | 102 202 334 401
...这样设计是否合理?
如果可以。现在要检索出所有的运动鞋。像这类20-40W级的数据表,用like速度快还是fulltext速度快?
select * from porduct_table where porduct_list like '%101%' (innodb表 + index + 产品名检索用 RLIKE)
或者
select * from porduct_table where match (porduct_list) against ('+101' IN BOOLEAN MODE) (myisam表+产品名检索和分类搜索均用 fulltext index)谢谢。
这个数据库的主要功能是:随时根据不同分类,将该类的所有产品从数据库里检索出来,附加功能是根据产品名检索。本人知识有限,初步设想如下,分类用数字代替,另有一个副表做参照。比如101代表运动鞋,202代表女鞋,305代表红色的鞋子,401代表nike,501代表美国... 把分类写进一个数据列里(porduct_list [varchar(32)])id | porduct_list
1 | 101 201 305
2 | 101 202
3 | 102 202 334 401
...这样设计是否合理?
如果可以。现在要检索出所有的运动鞋。像这类20-40W级的数据表,用like速度快还是fulltext速度快?
select * from porduct_table where porduct_list like '%101%' (innodb表 + index + 产品名检索用 RLIKE)
或者
select * from porduct_table where match (porduct_list) against ('+101' IN BOOLEAN MODE) (myisam表+产品名检索和分类搜索均用 fulltext index)谢谢。
解决方案 »
- 紧急!!!
- 继续mysql问题提问
- mysql方法计算了2次,怎么办
- 请高手分析下这个SQL语句,关于group by 和 sum的
- mysql如何应付千万级别的数据量查询,愿闻其详
- MYSQL版升星散分
- 启动的时候显示Timeout error occurred trying to start MySQL Daemon.
- c#+MySQLDriverCS,执行insert的插入中文的时候提示"incorrect string value" 请问应如何解决?急,谢谢
- 二进制日志问题
- ERROR 1044: Access denied for user: ''@'localhost' to database 'testdb'
- 模糊查询下查出固定值
- ireport中查询语句的问题 【坐等大拿】
id porduct_list
1 101
1 201
1 305
2 101
2 202
3 102
3 202
3 334
3 401
pid | detail
1 | 产品描述
2 | 产品描述表2:
pid | cid
1 101
1 201
1 305
2 101
2 202表3
cid | name
101 | 运动鞋
201 | 女鞋然后每次查询时用多表联合查询? (join in)?
第一种,按类别查询。这类查询是标签式的。比如:<a href="search.php?type=101">运动鞋</a>,然后按插入时间倒序,20个产品一页,分页打印出所有的运动鞋。第二种,客户填字搜索。搜索字段为表1的detail列,即根据产品的特征查询,初步设想用 RLIKE 或者 FULLTEXT。
1 101
1 201
1 305
2 101
2 202
这种分发,不可能把产品detail重复写入,所以按4楼的分表设想,查询语句如下:
SELECT * FROM table1
INNER JOIN table2
ON
table1.pid=table2.pid
WHERE table2.pid='101'
order by table1.date DESCdate是产品插入时间。
然后table3是不是还需要JOIN进去?
还是不需要做数据库,只要做一个json对照表就可以。比如[{"pid":101,"name":"运动鞋"}]
<a href="search.php?type=101">运动鞋</a>
然后 $_POST['type']=101, 查询json数据,得出name为运动鞋。
按照这样的设计,如果table1有30万条记录,table2可能会延伸出到200万条记录,我8楼的查询语句,INNER JOIN速度如何?
table2的id和porduct_list,有没有必要做索引?