Matlamat saya:
Pertanyaan, menyediakan semua wilayah di mana bangunan sedang dalam pembinaan.
Soalan saya:
Setelah saya memastikan setiap bangunan dibandingkan dengan bangunan yang sama (bandingkan upgrade_id), pertanyaan diteruskan selama-lamanya. Tanpa bahagian terakhir pernyataan where ia akan mengambil masa 1 saat, yang tidak mengapa.
Tetapan jadual
Wilayah berubah dari semasa ke semasa dan disimpan setiap hari dengan cap masa semasa.
Jadual Province_has_building mengandungi banyak-ke-banyak hubungan dari wilayah ke bangunan. Setiap bangunan mempunyai upgrade_id -> jenis bangunan dan kesihatannya.
Pertanyaan
SELECT
a.province_id,
a.province_location_id,
a.current_time,
b.current_time,
a_b.upgrade_id,
b_b.upgrade_id,
(a_b.health - b_b.health) as health
FROM province a
JOIN province b
ON b.province_location_id = a.province_location_id and b.current_time between TIMESTAMP(DATE_SUB(a.current_time, INTERVAL 3600 * 24 + 500 SECOND)) and TIMESTAMP(DATE_SUB(a.current_time, INTERVAL 3600 * 24 - 500 SECOND))
-- Day 1 Building
JOIN province_has_building a_pb
on a_pb.province_id = a.province_id
JOIN building a_b
on a_pb.building_id = a_b.building_id
-- Day 2 Building
JOIN province_has_building b_pb
on b_pb.province_id = b.province_id
JOIN building b_b
on b_pb.building_id = b_b.building_id
WHERE a.game_id = 5547382 and a_b.upgrade_id = b_b.upgrade_id
Penjelasan
Meja |
Taip |
Kunci yang mungkin |
Kunci |
Rujukan |
OK |
Ditapis |
Tambahan |
satu |
Rujukan |
Utama, fk_province_game1_idx |
fk_province_game1_idx |
Malar |
237387 |
100.00 |
|
a_pb |
Rujukan |
Utama, fk_building_mempunyai_province_province1_idx, fk_building_has_province_building1_idx |
fk_building_mempunyai_province_province1_idx |
testing.a.province_id |
1 |
100.00 |
Gunakan Indeks |
a_b |
eq_ref |
Sekolah rendah, sekolah menengah |
Utama |
testing.a_pb.building_id |
1 |
100.00 |
|
b_b |
Rujukan |
Sekolah rendah, sekolah menengah |
Sekolah menengah |
test.a_b.upgrade_id |
9 |
100.00 |
|
b_pb |
Rujukan |
Utama, fk_building_mempunyai_province_province1_idx, fk_building_has_province_building1_idx |
Utama |
testing.b_b.building_id |
1026 |
100.00 |
Guna Indeks |
b |
Rujukan |
Utama |
Utama |
testing.b_pb.province_id |
1 |
5.00 |
Tempat penggunaan |
Tambah beberapa indeks kompaun:
Jika
province_has_building
ialah "jadual pemetaan banyak-ke-banyak", lihat banyak-ke-banyak untuk lebih banyak petua pecutan.Untuk perbincangan lanjut sila sediakan
SHOW CREATE TABLE
.Apabila menambah indeks komposit, alih keluar indeks dengan lajur utama yang sama. Iaitu, apabila anda mempunyai kedua-dua INDEX(a) dan INDEX(a,b), buang yang pertama.