UK Property Price Paid

The dataset contains data about prices paid for real-estate property in England and Wales. The data is available since year 1995.
The size of the dataset in uncompressed form is about 4 GiB and it will take about 278 MiB in ClickHouse.

Source: https://www.gov.uk/government/statistical-data-sets/price-paid-data-downloads
Description of the fields: https://www.gov.uk/guidance/about-the-price-paid-data

Contains HM Land Registry data © Crown copyright and database right 2021. This data is licensed under the Open Government Licence v3.0.

Download the Dataset

Run the command:

  1. wget http://prod.publicdata.landregistry.gov.uk.s3-website-eu-west-1.amazonaws.com/pp-complete.csv

Download will take about 2 minutes with good internet connection.

Create the Table

  1. CREATE TABLE uk_price_paid
  2. (
  3. price UInt32,
  4. date Date,
  5. postcode1 LowCardinality(String),
  6. postcode2 LowCardinality(String),
  7. type Enum8('terraced' = 1, 'semi-detached' = 2, 'detached' = 3, 'flat' = 4, 'other' = 0),
  8. is_new UInt8,
  9. duration Enum8('freehold' = 1, 'leasehold' = 2, 'unknown' = 0),
  10. addr1 String,
  11. addr2 String,
  12. street LowCardinality(String),
  13. locality LowCardinality(String),
  14. town LowCardinality(String),
  15. district LowCardinality(String),
  16. county LowCardinality(String),
  17. category UInt8
  18. ) ENGINE = MergeTree ORDER BY (postcode1, postcode2, addr1, addr2);

Preprocess and Import Data

We will use clickhouse-local tool for data preprocessing and clickhouse-client to upload it.

In this example, we define the structure of source data from the CSV file and specify a query to preprocess the data with clickhouse-local.

The preprocessing is:
- splitting the postcode to two different columns postcode1 and postcode2 that is better for storage and queries;
- coverting the time field to date as it only contains 00:00 time;
- ignoring the UUid field because we don’t need it for analysis;
- transforming type and duration to more readable Enum fields with function transform;
- transforming is_new and category fields from single-character string (Y/N and A/B) to UInt8 field with 0 and 1.

Preprocessed data is piped directly to clickhouse-client to be inserted into ClickHouse table in streaming fashion.

  1. clickhouse-local --input-format CSV --structure '
  2. uuid String,
  3. price UInt32,
  4. time DateTime,
  5. postcode String,
  6. a String,
  7. b String,
  8. c String,
  9. addr1 String,
  10. addr2 String,
  11. street String,
  12. locality String,
  13. town String,
  14. district String,
  15. county String,
  16. d String,
  17. e String
  18. ' --query "
  19. WITH splitByChar(' ', postcode) AS p
  20. SELECT
  21. price,
  22. toDate(time) AS date,
  23. p[1] AS postcode1,
  24. p[2] AS postcode2,
  25. transform(a, ['T', 'S', 'D', 'F', 'O'], ['terraced', 'semi-detached', 'detached', 'flat', 'other']) AS type,
  26. b = 'Y' AS is_new,
  27. transform(c, ['F', 'L', 'U'], ['freehold', 'leasehold', 'unknown']) AS duration,
  28. addr1,
  29. addr2,
  30. street,
  31. locality,
  32. town,
  33. district,
  34. county,
  35. d = 'B' AS category
  36. FROM table" --date_time_input_format best_effort < pp-complete.csv | clickhouse-client --query "INSERT INTO uk_price_paid FORMAT TSV"

It will take about 40 seconds.

Validate the Data

Query:

  1. SELECT count() FROM uk_price_paid;

Result:

  1. ┌──count()─┐
  2. 26321785
  3. └──────────┘

The size of dataset in ClickHouse is just 278 MiB, check it.

Query:

  1. SELECT formatReadableSize(total_bytes) FROM system.tables WHERE name = 'uk_price_paid';

Result:

  1. ┌─formatReadableSize(total_bytes)─┐
  2. 278.80 MiB
  3. └─────────────────────────────────┘

Run Some Queries

Query 1. Average Price Per Year

Query:

  1. SELECT toYear(date) AS year, round(avg(price)) AS price, bar(price, 0, 1000000, 80) FROM uk_price_paid GROUP BY year ORDER BY year;

Result:

  1. ┌─year─┬──price─┬─bar(round(avg(price)), 0, 1000000, 80)─┐
  2. 1995 67932 █████▍
  3. 1996 71505 █████▋
  4. 1997 78532 ██████▎
  5. 1998 85436 ██████▋
  6. 1999 96037 ███████▋
  7. 2000 107479 ████████▌
  8. 2001 118885 █████████▌
  9. 2002 137941 ███████████
  10. 2003 155889 ████████████▍
  11. 2004 178885 ██████████████▎
  12. 2005 189351 ███████████████▏
  13. 2006 203528 ████████████████▎
  14. 2007 219378 █████████████████▌
  15. 2008 217056 █████████████████▎
  16. 2009 213419 █████████████████
  17. 2010 236109 ██████████████████▊
  18. 2011 232805 ██████████████████▌
  19. 2012 238367 ███████████████████
  20. 2013 256931 ████████████████████▌
  21. 2014 279915 ██████████████████████▍
  22. 2015 297266 ███████████████████████▋
  23. 2016 313201 █████████████████████████
  24. 2017 346097 ███████████████████████████▋
  25. 2018 350116 ████████████████████████████
  26. 2019 351013 ████████████████████████████
  27. 2020 369420 █████████████████████████████▌
  28. 2021 386903 ██████████████████████████████▊
  29. └──────┴────────┴────────────────────────────────────────┘

Query 2. Average Price per Year in London

Query:

  1. SELECT toYear(date) AS year, round(avg(price)) AS price, bar(price, 0, 2000000, 100) FROM uk_price_paid WHERE town = 'LONDON' GROUP BY year ORDER BY year;

Result:

  1. ┌─year─┬───price─┬─bar(round(avg(price)), 0, 2000000, 100)───────────────┐
  2. 1995 109116 █████▍
  3. 1996 118667 █████▊
  4. 1997 136518 ██████▋
  5. 1998 152983 ███████▋
  6. 1999 180637 █████████
  7. 2000 215838 ██████████▋
  8. 2001 232994 ███████████▋
  9. 2002 263670 █████████████▏
  10. 2003 278394 █████████████▊
  11. 2004 304666 ███████████████▏
  12. 2005 322875 ████████████████▏
  13. 2006 356191 █████████████████▋
  14. 2007 404054 ████████████████████▏
  15. 2008 420741 █████████████████████
  16. 2009 427753 █████████████████████▍
  17. 2010 480306 ████████████████████████
  18. 2011 496274 ████████████████████████▋
  19. 2012 519442 █████████████████████████▊
  20. 2013 616212 ██████████████████████████████▋
  21. 2014 724154 ████████████████████████████████████▏
  22. 2015 792129 ███████████████████████████████████████▌
  23. 2016 843655 ██████████████████████████████████████████▏
  24. 2017 982642 █████████████████████████████████████████████████▏
  25. 2018 1016835 ██████████████████████████████████████████████████▋
  26. 2019 1042849 ████████████████████████████████████████████████████▏
  27. 2020 1011889 ██████████████████████████████████████████████████▌
  28. 2021 960343 ████████████████████████████████████████████████
  29. └──────┴─────────┴───────────────────────────────────────────────────────┘

Something happened in 2013. I don’t have a clue. Maybe you have a clue what happened in 2020?

Query 3. The Most Expensive Neighborhoods

Query:

  1. SELECT
  2. town,
  3. district,
  4. count() AS c,
  5. round(avg(price)) AS price,
  6. bar(price, 0, 5000000, 100)
  7. FROM uk_price_paid
  8. WHERE date >= '2020-01-01'
  9. GROUP BY
  10. town,
  11. district
  12. HAVING c >= 100
  13. ORDER BY price DESC
  14. LIMIT 100;

Result:

  1. ┌─town─────────────────┬─district───────────────┬────c─┬───price─┬─bar(round(avg(price)), 0, 5000000, 100)────────────────────────────┐
  2. LONDON CITY OF WESTMINSTER 3606 3280239 █████████████████████████████████████████████████████████████████▌
  3. LONDON CITY OF LONDON 274 3160502 ███████████████████████████████████████████████████████████████▏
  4. LONDON KENSINGTON AND CHELSEA 2550 2308478 ██████████████████████████████████████████████▏
  5. LEATHERHEAD ELMBRIDGE 114 1897407 █████████████████████████████████████▊
  6. LONDON CAMDEN 3033 1805404 ████████████████████████████████████
  7. VIRGINIA WATER RUNNYMEDE 156 1753247 ███████████████████████████████████
  8. WINDLESHAM SURREY HEATH 108 1677613 █████████████████████████████████▌
  9. THORNTON HEATH CROYDON 546 1671721 █████████████████████████████████▍
  10. BARNET ENFIELD 124 1505840 ██████████████████████████████
  11. COBHAM ELMBRIDGE 387 1237250 ████████████████████████▋
  12. LONDON ISLINGTON 2668 1236980 ████████████████████████▋
  13. OXFORD SOUTH OXFORDSHIRE 321 1220907 ████████████████████████▍
  14. LONDON RICHMOND UPON THAMES 704 1215551 ████████████████████████▎
  15. LONDON HOUNSLOW 671 1207493 ████████████████████████▏
  16. ASCOT WINDSOR AND MAIDENHEAD 407 1183299 ███████████████████████▋
  17. BEACONSFIELD BUCKINGHAMSHIRE 330 1175615 ███████████████████████▌
  18. RICHMOND RICHMOND UPON THAMES 874 1110444 ██████████████████████▏
  19. LONDON HAMMERSMITH AND FULHAM 3086 1053983 █████████████████████
  20. SURBITON ELMBRIDGE 100 1011800 ████████████████████▏
  21. RADLETT HERTSMERE 283 1011712 ████████████████████▏
  22. SALCOMBE SOUTH HAMS 127 1011624 ████████████████████▏
  23. WEYBRIDGE ELMBRIDGE 655 1007265 ████████████████████▏
  24. ESHER ELMBRIDGE 485 986581 ███████████████████▋
  25. LEATHERHEAD GUILDFORD 202 977320 ███████████████████▌
  26. BURFORD WEST OXFORDSHIRE 111 966893 ███████████████████▎
  27. BROCKENHURST NEW FOREST 129 956675 ███████████████████▏
  28. HINDHEAD WAVERLEY 137 953753 ███████████████████
  29. GERRARDS CROSS BUCKINGHAMSHIRE 419 951121 ███████████████████
  30. EAST MOLESEY ELMBRIDGE 192 936769 ██████████████████▋
  31. CHALFONT ST GILES BUCKINGHAMSHIRE 146 925515 ██████████████████▌
  32. LONDON TOWER HAMLETS 4388 918304 ██████████████████▎
  33. OLNEY MILTON KEYNES 235 910646 ██████████████████▏
  34. HENLEY-ON-THAMES SOUTH OXFORDSHIRE 540 902418 ██████████████████
  35. LONDON SOUTHWARK 3885 892997 █████████████████▋
  36. KINGSTON UPON THAMES KINGSTON UPON THAMES 960 885969 █████████████████▋
  37. LONDON EALING 2658 871755 █████████████████▍
  38. CRANBROOK TUNBRIDGE WELLS 431 862348 █████████████████▏
  39. LONDON MERTON 2099 859118 █████████████████▏
  40. BELVEDERE BEXLEY 346 842423 ████████████████▋
  41. GUILDFORD WAVERLEY 143 841277 ████████████████▋
  42. HARPENDEN ST ALBANS 657 841216 ████████████████▋
  43. LONDON HACKNEY 3307 837090 ████████████████▋
  44. LONDON WANDSWORTH 6566 832663 ████████████████▋
  45. MAIDENHEAD BUCKINGHAMSHIRE 123 824299 ████████████████▍
  46. KINGS LANGLEY DACORUM 145 821331 ████████████████▍
  47. BERKHAMSTED DACORUM 543 818415 ████████████████▎
  48. GREAT MISSENDEN BUCKINGHAMSHIRE 226 802807 ████████████████
  49. BILLINGSHURST CHICHESTER 144 797829 ███████████████▊
  50. WOKING GUILDFORD 176 793494 ███████████████▋
  51. STOCKBRIDGE TEST VALLEY 178 793269 ███████████████▋
  52. EPSOM REIGATE AND BANSTEAD 172 791862 ███████████████▋
  53. TONBRIDGE TUNBRIDGE WELLS 360 787876 ███████████████▋
  54. TEDDINGTON RICHMOND UPON THAMES 595 786492 ███████████████▋
  55. TWICKENHAM RICHMOND UPON THAMES 1155 786193 ███████████████▋
  56. LYNDHURST NEW FOREST 102 785593 ███████████████▋
  57. LONDON LAMBETH 5228 774574 ███████████████▍
  58. LONDON BARNET 3955 773259 ███████████████▍
  59. OXFORD VALE OF WHITE HORSE 353 772088 ███████████████▍
  60. TONBRIDGE MAIDSTONE 305 770740 ███████████████▍
  61. LUTTERWORTH HARBOROUGH 538 768634 ███████████████▎
  62. WOODSTOCK WEST OXFORDSHIRE 140 766037 ███████████████▎
  63. MIDHURST CHICHESTER 257 764815 ███████████████▎
  64. MARLOW BUCKINGHAMSHIRE 327 761876 ███████████████▏
  65. LONDON NEWHAM 3237 761784 ███████████████▏
  66. ALDERLEY EDGE CHESHIRE EAST 178 757318 ███████████████▏
  67. LUTON CENTRAL BEDFORDSHIRE 212 754283 ███████████████
  68. PETWORTH CHICHESTER 154 754220 ███████████████
  69. ALRESFORD WINCHESTER 219 752718 ███████████████
  70. POTTERS BAR WELWYN HATFIELD 174 748465 ██████████████▊
  71. HASLEMERE CHICHESTER 128 746907 ██████████████▊
  72. TADWORTH REIGATE AND BANSTEAD 502 743252 ██████████████▋
  73. THAMES DITTON ELMBRIDGE 244 741913 ██████████████▋
  74. REIGATE REIGATE AND BANSTEAD 581 738198 ██████████████▋
  75. BOURNE END BUCKINGHAMSHIRE 138 735190 ██████████████▋
  76. SEVENOAKS SEVENOAKS 1156 730018 ██████████████▌
  77. OXTED TANDRIDGE 336 729123 ██████████████▌
  78. INGATESTONE BRENTWOOD 166 728103 ██████████████▌
  79. LONDON BRENT 2079 720605 ██████████████▍
  80. LONDON HARINGEY 3216 717780 ██████████████▎
  81. PURLEY CROYDON 575 716108 ██████████████▎
  82. WELWYN WELWYN HATFIELD 222 710603 ██████████████▏
  83. RICKMANSWORTH THREE RIVERS 798 704571 ██████████████
  84. BANSTEAD REIGATE AND BANSTEAD 401 701293 ██████████████
  85. CHIGWELL EPPING FOREST 261 701203 ██████████████
  86. PINNER HARROW 528 698885 █████████████▊
  87. HASLEMERE WAVERLEY 280 696659 █████████████▊
  88. SLOUGH BUCKINGHAMSHIRE 396 694917 █████████████▊
  89. WALTON-ON-THAMES ELMBRIDGE 946 692395 █████████████▋
  90. READING SOUTH OXFORDSHIRE 318 691988 █████████████▋
  91. NORTHWOOD HILLINGDON 271 690643 █████████████▋
  92. FELTHAM HOUNSLOW 763 688595 █████████████▋
  93. ASHTEAD MOLE VALLEY 303 687923 █████████████▋
  94. BARNET BARNET 975 686980 █████████████▋
  95. WOKING SURREY HEATH 283 686669 █████████████▋
  96. MALMESBURY WILTSHIRE 323 683324 █████████████▋
  97. AMERSHAM BUCKINGHAMSHIRE 496 680962 █████████████▌
  98. CHISLEHURST BROMLEY 430 680209 █████████████▌
  99. HYTHE FOLKESTONE AND HYTHE 490 676908 █████████████▌
  100. MAYFIELD WEALDEN 101 676210 █████████████▌
  101. ASCOT BRACKNELL FOREST 168 676004 █████████████▌
  102. └──────────────────────┴────────────────────────┴──────┴─────────┴────────────────────────────────────────────────────────────────────┘

Let’s Speed Up Queries Using Projections

Projections allow to improve queries speed by storing pre-aggregated data.

Build a Projection

Create an aggregate projection by dimensions toYear(date), district, town:

  1. ALTER TABLE uk_price_paid
  2. ADD PROJECTION projection_by_year_district_town
  3. (
  4. SELECT
  5. toYear(date),
  6. district,
  7. town,
  8. avg(price),
  9. sum(price),
  10. count()
  11. GROUP BY
  12. toYear(date),
  13. district,
  14. town
  15. );

Populate the projection for existing data (without it projection will be created for only newly inserted data):

  1. ALTER TABLE uk_price_paid
  2. MATERIALIZE PROJECTION projection_by_year_district_town
  3. SETTINGS mutations_sync = 1;

Test Performance

Let’s run the same 3 queries.

Enable projections for selects:

  1. SET allow_experimental_projection_optimization = 1;

Query 1. Average Price Per Year

Query:

  1. SELECT
  2. toYear(date) AS year,
  3. round(avg(price)) AS price,
  4. bar(price, 0, 1000000, 80)
  5. FROM uk_price_paid
  6. GROUP BY year
  7. ORDER BY year ASC;

Result:

  1. ┌─year─┬──price─┬─bar(round(avg(price)), 0, 1000000, 80)─┐
  2. 1995 67932 █████▍
  3. 1996 71505 █████▋
  4. 1997 78532 ██████▎
  5. 1998 85436 ██████▋
  6. 1999 96037 ███████▋
  7. 2000 107479 ████████▌
  8. 2001 118885 █████████▌
  9. 2002 137941 ███████████
  10. 2003 155889 ████████████▍
  11. 2004 178885 ██████████████▎
  12. 2005 189351 ███████████████▏
  13. 2006 203528 ████████████████▎
  14. 2007 219378 █████████████████▌
  15. 2008 217056 █████████████████▎
  16. 2009 213419 █████████████████
  17. 2010 236109 ██████████████████▊
  18. 2011 232805 ██████████████████▌
  19. 2012 238367 ███████████████████
  20. 2013 256931 ████████████████████▌
  21. 2014 279915 ██████████████████████▍
  22. 2015 297266 ███████████████████████▋
  23. 2016 313201 █████████████████████████
  24. 2017 346097 ███████████████████████████▋
  25. 2018 350116 ████████████████████████████
  26. 2019 351013 ████████████████████████████
  27. 2020 369420 █████████████████████████████▌
  28. 2021 386903 ██████████████████████████████▊
  29. └──────┴────────┴────────────────────────────────────────┘

Query 2. Average Price Per Year in London

Query:

  1. SELECT
  2. toYear(date) AS year,
  3. round(avg(price)) AS price,
  4. bar(price, 0, 2000000, 100)
  5. FROM uk_price_paid
  6. WHERE town = 'LONDON'
  7. GROUP BY year
  8. ORDER BY year ASC;

Result:

  1. ┌─year─┬───price─┬─bar(round(avg(price)), 0, 2000000, 100)───────────────┐
  2. 1995 109116 █████▍
  3. 1996 118667 █████▊
  4. 1997 136518 ██████▋
  5. 1998 152983 ███████▋
  6. 1999 180637 █████████
  7. 2000 215838 ██████████▋
  8. 2001 232994 ███████████▋
  9. 2002 263670 █████████████▏
  10. 2003 278394 █████████████▊
  11. 2004 304666 ███████████████▏
  12. 2005 322875 ████████████████▏
  13. 2006 356191 █████████████████▋
  14. 2007 404054 ████████████████████▏
  15. 2008 420741 █████████████████████
  16. 2009 427753 █████████████████████▍
  17. 2010 480306 ████████████████████████
  18. 2011 496274 ████████████████████████▋
  19. 2012 519442 █████████████████████████▊
  20. 2013 616212 ██████████████████████████████▋
  21. 2014 724154 ████████████████████████████████████▏
  22. 2015 792129 ███████████████████████████████████████▌
  23. 2016 843655 ██████████████████████████████████████████▏
  24. 2017 982642 █████████████████████████████████████████████████▏
  25. 2018 1016835 ██████████████████████████████████████████████████▋
  26. 2019 1042849 ████████████████████████████████████████████████████▏
  27. 2020 1011889 ██████████████████████████████████████████████████▌
  28. 2021 960343 ████████████████████████████████████████████████
  29. └──────┴─────────┴───────────────────────────────────────────────────────┘

Query 3. The Most Expensive Neighborhoods

The condition (date >= ‘2020-01-01’) needs to be modified to match projection dimension (toYear(date) >= 2020).

Query:

  1. SELECT
  2. town,
  3. district,
  4. count() AS c,
  5. round(avg(price)) AS price,
  6. bar(price, 0, 5000000, 100)
  7. FROM uk_price_paid
  8. WHERE toYear(date) >= 2020
  9. GROUP BY
  10. town,
  11. district
  12. HAVING c >= 100
  13. ORDER BY price DESC
  14. LIMIT 100;

Result:

  1. ┌─town─────────────────┬─district───────────────┬────c─┬───price─┬─bar(round(avg(price)), 0, 5000000, 100)────────────────────────────┐
  2. LONDON CITY OF WESTMINSTER 3606 3280239 █████████████████████████████████████████████████████████████████▌
  3. LONDON CITY OF LONDON 274 3160502 ███████████████████████████████████████████████████████████████▏
  4. LONDON KENSINGTON AND CHELSEA 2550 2308478 ██████████████████████████████████████████████▏
  5. LEATHERHEAD ELMBRIDGE 114 1897407 █████████████████████████████████████▊
  6. LONDON CAMDEN 3033 1805404 ████████████████████████████████████
  7. VIRGINIA WATER RUNNYMEDE 156 1753247 ███████████████████████████████████
  8. WINDLESHAM SURREY HEATH 108 1677613 █████████████████████████████████▌
  9. THORNTON HEATH CROYDON 546 1671721 █████████████████████████████████▍
  10. BARNET ENFIELD 124 1505840 ██████████████████████████████
  11. COBHAM ELMBRIDGE 387 1237250 ████████████████████████▋
  12. LONDON ISLINGTON 2668 1236980 ████████████████████████▋
  13. OXFORD SOUTH OXFORDSHIRE 321 1220907 ████████████████████████▍
  14. LONDON RICHMOND UPON THAMES 704 1215551 ████████████████████████▎
  15. LONDON HOUNSLOW 671 1207493 ████████████████████████▏
  16. ASCOT WINDSOR AND MAIDENHEAD 407 1183299 ███████████████████████▋
  17. BEACONSFIELD BUCKINGHAMSHIRE 330 1175615 ███████████████████████▌
  18. RICHMOND RICHMOND UPON THAMES 874 1110444 ██████████████████████▏
  19. LONDON HAMMERSMITH AND FULHAM 3086 1053983 █████████████████████
  20. SURBITON ELMBRIDGE 100 1011800 ████████████████████▏
  21. RADLETT HERTSMERE 283 1011712 ████████████████████▏
  22. SALCOMBE SOUTH HAMS 127 1011624 ████████████████████▏
  23. WEYBRIDGE ELMBRIDGE 655 1007265 ████████████████████▏
  24. ESHER ELMBRIDGE 485 986581 ███████████████████▋
  25. LEATHERHEAD GUILDFORD 202 977320 ███████████████████▌
  26. BURFORD WEST OXFORDSHIRE 111 966893 ███████████████████▎
  27. BROCKENHURST NEW FOREST 129 956675 ███████████████████▏
  28. HINDHEAD WAVERLEY 137 953753 ███████████████████
  29. GERRARDS CROSS BUCKINGHAMSHIRE 419 951121 ███████████████████
  30. EAST MOLESEY ELMBRIDGE 192 936769 ██████████████████▋
  31. CHALFONT ST GILES BUCKINGHAMSHIRE 146 925515 ██████████████████▌
  32. LONDON TOWER HAMLETS 4388 918304 ██████████████████▎
  33. OLNEY MILTON KEYNES 235 910646 ██████████████████▏
  34. HENLEY-ON-THAMES SOUTH OXFORDSHIRE 540 902418 ██████████████████
  35. LONDON SOUTHWARK 3885 892997 █████████████████▋
  36. KINGSTON UPON THAMES KINGSTON UPON THAMES 960 885969 █████████████████▋
  37. LONDON EALING 2658 871755 █████████████████▍
  38. CRANBROOK TUNBRIDGE WELLS 431 862348 █████████████████▏
  39. LONDON MERTON 2099 859118 █████████████████▏
  40. BELVEDERE BEXLEY 346 842423 ████████████████▋
  41. GUILDFORD WAVERLEY 143 841277 ████████████████▋
  42. HARPENDEN ST ALBANS 657 841216 ████████████████▋
  43. LONDON HACKNEY 3307 837090 ████████████████▋
  44. LONDON WANDSWORTH 6566 832663 ████████████████▋
  45. MAIDENHEAD BUCKINGHAMSHIRE 123 824299 ████████████████▍
  46. KINGS LANGLEY DACORUM 145 821331 ████████████████▍
  47. BERKHAMSTED DACORUM 543 818415 ████████████████▎
  48. GREAT MISSENDEN BUCKINGHAMSHIRE 226 802807 ████████████████
  49. BILLINGSHURST CHICHESTER 144 797829 ███████████████▊
  50. WOKING GUILDFORD 176 793494 ███████████████▋
  51. STOCKBRIDGE TEST VALLEY 178 793269 ███████████████▋
  52. EPSOM REIGATE AND BANSTEAD 172 791862 ███████████████▋
  53. TONBRIDGE TUNBRIDGE WELLS 360 787876 ███████████████▋
  54. TEDDINGTON RICHMOND UPON THAMES 595 786492 ███████████████▋
  55. TWICKENHAM RICHMOND UPON THAMES 1155 786193 ███████████████▋
  56. LYNDHURST NEW FOREST 102 785593 ███████████████▋
  57. LONDON LAMBETH 5228 774574 ███████████████▍
  58. LONDON BARNET 3955 773259 ███████████████▍
  59. OXFORD VALE OF WHITE HORSE 353 772088 ███████████████▍
  60. TONBRIDGE MAIDSTONE 305 770740 ███████████████▍
  61. LUTTERWORTH HARBOROUGH 538 768634 ███████████████▎
  62. WOODSTOCK WEST OXFORDSHIRE 140 766037 ███████████████▎
  63. MIDHURST CHICHESTER 257 764815 ███████████████▎
  64. MARLOW BUCKINGHAMSHIRE 327 761876 ███████████████▏
  65. LONDON NEWHAM 3237 761784 ███████████████▏
  66. ALDERLEY EDGE CHESHIRE EAST 178 757318 ███████████████▏
  67. LUTON CENTRAL BEDFORDSHIRE 212 754283 ███████████████
  68. PETWORTH CHICHESTER 154 754220 ███████████████
  69. ALRESFORD WINCHESTER 219 752718 ███████████████
  70. POTTERS BAR WELWYN HATFIELD 174 748465 ██████████████▊
  71. HASLEMERE CHICHESTER 128 746907 ██████████████▊
  72. TADWORTH REIGATE AND BANSTEAD 502 743252 ██████████████▋
  73. THAMES DITTON ELMBRIDGE 244 741913 ██████████████▋
  74. REIGATE REIGATE AND BANSTEAD 581 738198 ██████████████▋
  75. BOURNE END BUCKINGHAMSHIRE 138 735190 ██████████████▋
  76. SEVENOAKS SEVENOAKS 1156 730018 ██████████████▌
  77. OXTED TANDRIDGE 336 729123 ██████████████▌
  78. INGATESTONE BRENTWOOD 166 728103 ██████████████▌
  79. LONDON BRENT 2079 720605 ██████████████▍
  80. LONDON HARINGEY 3216 717780 ██████████████▎
  81. PURLEY CROYDON 575 716108 ██████████████▎
  82. WELWYN WELWYN HATFIELD 222 710603 ██████████████▏
  83. RICKMANSWORTH THREE RIVERS 798 704571 ██████████████
  84. BANSTEAD REIGATE AND BANSTEAD 401 701293 ██████████████
  85. CHIGWELL EPPING FOREST 261 701203 ██████████████
  86. PINNER HARROW 528 698885 █████████████▊
  87. HASLEMERE WAVERLEY 280 696659 █████████████▊
  88. SLOUGH BUCKINGHAMSHIRE 396 694917 █████████████▊
  89. WALTON-ON-THAMES ELMBRIDGE 946 692395 █████████████▋
  90. READING SOUTH OXFORDSHIRE 318 691988 █████████████▋
  91. NORTHWOOD HILLINGDON 271 690643 █████████████▋
  92. FELTHAM HOUNSLOW 763 688595 █████████████▋
  93. ASHTEAD MOLE VALLEY 303 687923 █████████████▋
  94. BARNET BARNET 975 686980 █████████████▋
  95. WOKING SURREY HEATH 283 686669 █████████████▋
  96. MALMESBURY WILTSHIRE 323 683324 █████████████▋
  97. AMERSHAM BUCKINGHAMSHIRE 496 680962 █████████████▌
  98. CHISLEHURST BROMLEY 430 680209 █████████████▌
  99. HYTHE FOLKESTONE AND HYTHE 490 676908 █████████████▌
  100. MAYFIELD WEALDEN 101 676210 █████████████▌
  101. ASCOT BRACKNELL FOREST 168 676004 █████████████▌
  102. └──────────────────────┴────────────────────────┴──────┴─────────┴────────────────────────────────────────────────────────────────────┘

Summary

All 3 queries work much faster and read fewer rows.

  1. Query 1
  2. no projection: 27 rows in set. Elapsed: 0.158 sec. Processed 26.32 million rows, 157.93 MB (166.57 million rows/s., 999.39 MB/s.)
  3. projection: 27 rows in set. Elapsed: 0.007 sec. Processed 105.96 thousand rows, 3.33 MB (14.58 million rows/s., 458.13 MB/s.)
  4. Query 2
  5. no projection: 27 rows in set. Elapsed: 0.163 sec. Processed 26.32 million rows, 80.01 MB (161.75 million rows/s., 491.64 MB/s.)
  6. projection: 27 rows in set. Elapsed: 0.008 sec. Processed 105.96 thousand rows, 3.67 MB (13.29 million rows/s., 459.89 MB/s.)
  7. Query 3
  8. no projection: 100 rows in set. Elapsed: 0.069 sec. Processed 26.32 million rows, 62.47 MB (382.13 million rows/s., 906.93 MB/s.)
  9. projection: 100 rows in set. Elapsed: 0.029 sec. Processed 8.08 thousand rows, 511.08 KB (276.06 thousand rows/s., 17.47 MB/s.)

Test It in Playground

The dataset is also available in the Online Playground.