0

这里有张桌子:

CREATE TABLE `test` (
  `thing` int(10) unsigned NOT NULL,
  `price` decimal(10,2) unsigned NOT NULL,
  PRIMARY KEY (`thing`,`price`),
  KEY `thing` (`thing`),
  KEY `price` (`price`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

以及那里的一些价值观:

INSERT INTO test(thing,price)
VALUES
(1,5.00),
(2,7.50),
(3,8.70),
(4,9.00),
(5,9.50),
(6,9.75),
(7,10.00),
(8,10.50),
(9,10.75),
(10,11.00),
(11,11.25);

我想price从这张表中得到一个 MINIMAL,比说,更多9.2- 那是(5,9.50)记录。所以,我这样做: SELECT thing, price FROM test WHERE price > 9.2 ORDER BY price LIMIT 1。它的 EXPLAIN 输出表明 MySQL 遍历了超过 9.2 的所有 7 行:

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  test    range   price   price   5   \N  7   Using where; Using index

有没有办法以某种方式加快速度?这样 MySQL 会给我一个比我的条件多一点的记录吗?

在此先感谢您的帮助!

4

2 回答 2

0

你希望它有多快?这现在有多慢?这可能是过早优化的情况。请理解,解释计划中的行数只是一个估计值。

但是,如果有什么不同,试试这个(??):

SELECT thing, min(price) FROM test WHERE price > 9.2
于 2013-02-13T18:11:42.363 回答
0

在 上创建索引price。您可能不希望主键 on (thing, price),因为这将允许 athing拥有多个price。只thing做主键。(我假设您不希望某个特定值thing具有多个price值。)

于 2013-02-13T18:16:59.393 回答