Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MYSQL Menggunakan Indeks Spasial

Sayangnya, apa yang Anda lihat adalah masalah umum dengan cara fungsi spasial diimplementasikan di MySQL dan kelemahan terkait dengan subkueri yang melibatkan fungsi spasial.

Agar fungsi Berisi dan Berpotongan berfungsi dengan baik, dan agar indeks dapat digunakan, Anda harus memiliki salah satu geometri berupa konstanta. Ini tampaknya tidak didokumentasikan, meskipun semua contoh yang akan Anda lihat dengan MySQL dengan Intersects/Contains bekerja dengan cara ini.

Jadi, Anda tidak dapat menulis sesuatu seperti ini, seperti yang Anda lakukan di Oracle Spatial atau Postgis,

select a.*, b.* 
from sometable a, someothertable b 
where ST_Intersects(a.geom, b.geom) 
and a.someattribute=... and b.someattribute=...;

Dalam kueri seperti itu, jika tabel a dan b keduanya memiliki indeks spasial, mereka akan digunakan, asalkan ini lebih membatasi daripada beberapa atribut lain yang mungkin Anda masukkan ke dalam klausa where.

Hal yang sama berlaku untuk self join, di mana Anda ingin menemukan semua poligon yang berpotongan dengan semua poligon lain dalam tabel berdasarkan beberapa atribut, misalnya,

select a.* 
from sometable a, sometable b 
where ST_Intersects(a.geom, b.geom) ....

Jadi, dalam spasial MySQL Anda dipaksa untuk memiliki salah satu geometri menjadi konstanta.

Selain itu, sintaks gabungan kiri tidak masuk akal dengan spasial (meskipun didukung), karena Anda tidak benar-benar bergabung pada satu atribut yang cocok, tetapi pada operator penahanan/persimpangan 2 dimensi.

Juga, saya cukup yakin bahwa di dalam Anda bergabung, indeks tidak digunakan, jika Anda melihat key dan rows keluaran dari penjelasan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cara memesan respons JSON berdasarkan hubungan basis data menggunakan fasih

  2. PILIH Kinerja Pernyataan menggunakan * versus Daftar Nama Bidang

  3. Cara membuat cadangan database MySQL menggunakan pekerjaan cron

  4. Memiliki masalah Timezone dengan PHP dan MySQL

  5. Operasi bitwise MySQL, filter mekar