Очень медленное сканирование кучи растровых изображений в Postgres

У меня есть следующая простая таблица, содержащая данные измерения трафика:

CREATE TABLE "TrafficData"
(
  "RoadID" character varying NOT NULL,
  "DateID" numeric NOT NULL,
  "ExactDateTime" timestamp NOT NULL,
  "CarsSpeed" numeric NOT NULL,
  "CarsCount" numeric NOT NULL
)
CREATE INDEX "RoadDate_Idx" ON "TrafficData" USING btree ("RoadID", "DateID");

Столбец RoadID однозначно идентифицирует дорогу, данные которой записываются, а DateID определяет день года (1. .365) данных - в основном округленное представление ExactDateTime.

У меня около 100 000 000 строк: 1000 различных значений в столбце «RoadID» и 365 различных значений в столбце «DateID».

Затем я выполняю следующий запрос:

SELECT * FROM "TrafficData"
WHERE "RoadID"='Station_1'
AND "DateID">20100610 AND "DateID"<20100618;

На это уходит до трех ошеломляющих секунд, и я не могу понять, ПОЧЕМУ.

EXPLAIN ANALYZE дает мне следующий результат:

Bitmap Heap Scan on "TrafficData"  (cost=104.84..9743.06 rows=2496 width=47) (actual time=35.112..2162.404 rows=2016 loops=1)
  Recheck Cond: ((("RoadID")::text = 'Station_1'::text) AND ("DateID" > 20100610::numeric) AND ("DateID" < 20100618::numeric))
  ->  Bitmap Index Scan on "RoadDate_Idx"  (cost=0.00..104.22 rows=2496 width=0) (actual time=1.637..1.637 rows=2016 loops=1)
        Index Cond: ((("RoadID")::text = 'Station_1'::text) AND ("DateID" > 20100610::numeric) AND ("DateID" < 20100618::numeric))
Total runtime: 2163.985 ms

Мой спецификации:

  • Windows 7
  • Postgres 9.0
  • 4 ГБ ОЗУ

Я буду очень признателен за любые полезные указатели!

-121 --- 16 48380- Почему включение модуля Ruby на самом деле не является «множественным наследованием» и как стиль Ruby позволяет избежать проблем, связанных с множественным наследованием? Матц предположительно сказал, что «миксины могут делать почти все, что делает множественное наследование, без связанных с этим недостатков. «(Слова Matz).« Прежде всего, почему включение модуля Ruby не является «множественным наследованием» ...

Матц якобы сказал, что «миксины могут делать почти все, что делает множественное наследование, без связанных с этим недостатков» (слова Matz)."

Прежде всего, почему включение модуля Ruby не является« множественным наследованием »? Мне кажется, что между модулями и классами очень мало различий. Тот факт, что вы не можете создать экземпляр модуля, не имеет значения, когда он используется в качестве суперкласса.

Я также знаю, что последовательное включение модуля формирует единую цепочку наследования (не дерево), идущую вверх от класса. Но этого, на мой взгляд, недостаточно, чтобы отличить его от «множественного наследования», поскольку система множественного наследования Python также » линеаризует «цепочку суперклассов (используя алгоритм C3 ), просто процесс« линеаризации »Ruby значительно проще.

Так что же именно отличает миксины модулей Ruby от множественного наследования, скажем, в таких языках, как Python? почему аргументы, лежащие в основе принятия Python алгоритма c3 MRO, не применимы к Ruby? И если они действительно применимы - почему Ruby решил не применять этот алгоритм?

спасибо

13
задан horseyguy 27 October 2010 в 13:22
поделиться