Rumah  >  Soal Jawab  >  teks badan

Semak sama ada dua nilai dalam pertanyaan adalah sama, menjadikan pertanyaan sangat perlahan

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

P粉511985082P粉511985082179 hari yang lalu296

membalas semua(1)saya akan balas

  • P粉178132828

    P粉1781328282024-04-04 16:06:29

    Tambah beberapa indeks kompaun:

    province:  INDEX(game_id, province_location_id,  province_id, current_time)
    province:  INDEX(province_location_id,  current_time, province_id)
    building:  INDEX(upgrade_id, building_id,  health)
    province_has_building:  INDEX(province_id,  building_id)

    Jika province_has_building ialah "jadual pemetaan banyak-ke-banyak", lihat banyak-ke-banyak untuk lebih banyak petua pecutan.

    Untuk perbincangan lanjut sila sediakanSHOW 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.

    balas
    0
  • Batalbalas