【发布时间】:2013-06-12 22:43:27
【问题描述】:
我的表结构如下:
CREATE TABLE test (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
field_1 VARCHAR(60) NOT NULL,
field_2 INT(10) UNSIGNED NULL,
field_3 INT(10) UNSIGNED NULL,
field_4 INT(10) UNSIGNED NULL,
field_5 CHAR(2) NULL,
field_6 INT(10) UNSIGNED NOT NULL,
rank TINYINT(2) NOT NULL DEFAULT '0',
status TINYINT(3) NOT NULL DEFAULT '0',
PRIMARY KEY (id),
INDEX (status)
) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE = MyISAM;
在上表中,rank 和 status 字段将分别具有 0-9 和 0-4 之间的整数值。
目前该表包含大约 950K 数据,我正在尝试尽可能优化我的查询。
基本上,我需要在字段rank 上选择带有降序的where 子句的字段。
例如,下面是几个sql查询:
SELECT field_1, field_2, field_3 FROM test WHERE field_1 = 'data1' && status IN ('0', '1', '2') ORDER BY rank DESC LIMIT 0, 20;
SELECT field_1, field_2, field_3 FROM test WHERE field_2 = '5' && status IN ('1', '2') ORDER BY rank DESC LIMIT 0, 20;
SELECT field_1, field_2, field_3 FROM test WHERE field_5 = 'US' && status IN ('0', '2') ORDER BY rank DESC LIMIT 0, 20;
上面的查询ORDER BY rank DESC 很重要。所以我很困惑是否应该在单列或多列上添加索引。
谁能建议我最好的解决方案。
【问题讨论】:
-
很遗憾,您的问题没有是/否的答案。添加索引绝对可以提高性能,但也可能会阻碍性能。您最好的选择是试一试并查看
EXPLAIN计划。
标签: mysql performance query-optimization