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 が私の状態よりも少し多いレコードを 1 つ与えるにはどうすればよいでしょうか?

よろしくお願いします。

4

2 に答える 2

0

どれくらい速くしたいですか?これは今どれくらい遅いですか?これは、時期尚早の最適化の場合である可能性があります。Explainプランの行数は単なる見積もりであることを理解してください。

しかし、それでもなお、違いが生じる場合はこれを試してください(??):

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

にインデックスを作成しますprice。に主キーを設定したくない場合があります。これにより、に複数のキー(thing, price)を設定できるようになります。主キーを作成するだけです。(特定の値に複数の値を設定したくないと想定しています。)thingpricethingthingprice

于 2013-02-13T18:16:59.393 に答える