【发布时间】:2012-05-15 05:05:48
【问题描述】:
我的表结构如下:
如果不存在则创建表
commodity_data(dataidbigint(20) unsigned NOT NULL AUTO_INCREMENT,commoditysmallint(6) NOT NULL,marketsmallint(6)非空,quantity浮点非空,price_minmediumint(9)非空,price_maxmediumint(9)非空,price_modalmediumint(9)非NULL,datedate NOT NULL,modifiedtimestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
主键 (dataid)
) 引擎=InnoDB 默认字符集=latin1 AUTO_INCREMENT=7059415 ;
我在此表上的 SELECT 将包含 WHERE 子句,其中包含“商品”、“市场”和“日期”中的一个或多个搜索。
我的 ORDER BY 将按 price_min、price_max 或 price_modal 以及大多数其他字段。
该表最终将超过 1000 万行,并将继续以每天大约 5 到 10000 的速度扩展。
我的服务器目前是 VPS 双 2.4Ghz xeon,4GB RAM。
目前唯一的索引在“dataid”字段上。
我已经读到设置索引会有所帮助,我认为这些应该是关于商品、市场和日期的,但我想在继续之前检查这是否正确,除非有更好的方法来做到这一点。表大小将在 600MB 左右,并且还在不断增长。
“commodity”和“market”字段是指其他表中商品和市场的ID。我要么 LEFT JOIN 要么如果它更快,我会将这些表读入 PHP 中的数组(简单的一级关联数组 id => 名称)。大约有 300 种商品和 2,000 个市场。
目前 SELECT 花费的时间太长,例如带有 WHERE 子句的 COUNT 查询将花费一分钟或更长时间。
【问题讨论】: