1

私は2つのテーブルを持っています:

  • t_cities( idCity, idCountry, name, population)
  • t_countries( idCountry, name)

t_cities50000 行あるので、英国の都市を含む VIEW を作成します (1100 のみ):

CREATE VIEW v_city_uk AS SELECT * FROM t_cities WHERE idCountry = 140

これまでのところすべて問題ありません。1100 行の VIEW が表示されます。
クエリ

SELECT COUNT(*) FROM v_city_uk

1100 を返しますが、EXPLAIN:

EXPLAIN SELECT COUNT(*) FROM v_city_uk

このクエリを実行するために50000行をチェックしていると言っています。なんで?
これが起こらないようにする方法はありますか?ビューを作成して、クエリが同じにならないように高速化するためです。


編集:「集計テーブル」が必要です。matthewdavidson に感謝します。

4

1 に答える 1

2

ビューはプリコンパイルされたクエリまたは保存された結果ではないため、事前定義されたクエリです。毎回、ビュー内のSELECTステートメントを実行します。そうしないと、ビューが更新されません。ビューはクエリの表現です。これはプログラマーにとっては便利な速記ですが、マシンにとっては便利ではありません。

言い換えれば、あなたが

SELECT something FROM YourView

そしてYourViewはによって定義されます

CREATE VIEW YourView AS SELECT stuff FROM sometable 
INNER JOIN othertable ON sometable.column = othertable.column

実際に実行されているのは

 SELECT something FROM 
(SELECT stuff FROM sometable 
INNER JOIN othertable ON sometable.column = othertable.column)

結果を保存する場合は、集計テーブルを使用する必要があります。

于 2012-06-06T04:16:57.543 に答える