全部产品
Search
文档中心

Database Autonomy Service:[Pemberitahuan] Optimasi algoritma template SQL

更新时间:Jun 28, 2025

Mulai 1 September 2024, algoritma template SQL dari Database Autonomy Service (DAS) telah dioptimalkan.

Informasi latar belakang

DAS menyediakan algoritma template SQL untuk analisis kueri lambat dan audit SQL. DAS memproses Pernyataan SQL untuk menghasilkan template SQL berdasarkan algoritma ini, kemudian mengumpulkan dan menganalisis template SQL yang memiliki tipe serupa. Namun, algoritma saat ini tidak dapat menangani pernyataan SQL terpotong dengan baik. Misalnya, ketidakpastian dalam posisi pemotongan pernyataan SQL dapat menghasilkan banyak template SQL baru, sehingga sulit untuk pengelompokannya.

Tanggal efektif

Mulai 1 September 2024, algoritma template SQL untuk kueri lambat dan audit SQL telah dioptimalkan.

Catatan

Anda tidak akan menerima pemberitahuan lebih lanjut tentang optimasi iteratif algoritma template SQL setelah 1 September 2024. Tanggapan terhadap permintaan API tetap berlaku.

Cakupan efektif

Mesin database berikut mendukung optimasi: ApsaraDB RDS for MySQL, ApsaraDB RDS for PostgreSQL, ApsaraDB RDS for SQL Server, ApsaraDB RDS for MariaDB, dan PolarDB for MySQL.

Konten

Berikut adalah daftar optimasi yang diberikan:

  • $$ dapat digunakan sebagai pembatas konstanta string pada instance ApsaraDB RDS for PostgreSQL saat memproses pernyataan SQL, serta memperbaiki masalah penggantian identifier secara salah dengan tanda tanya (?).

    Contoh pernyataan SQL asli:

    UPDATE "study" SET "name" = 'xiaoming', "ext" = $${"math":90,"english":91}$$ where id=128;

    Sebelum optimasi, template SQL yang dihasilkan:

    UPDATE ?  SET ?  = ?, ?  = $${?:?,?:?}$$ where id=?;

    Setelah optimasi, template SQL yang dihasilkan:

    UPDATE "study" SET "name"=?,"ext"=?  WHERE id=?;
  • Akhiran numerik nama tabel dan kolom dapat diganti untuk mengurangi jumlah template.

    Contoh pernyataan SQL asli:

    select * from [school_3].[class].[student_25];

    Sebelum optimasi, template SQL yang dihasilkan:

    select * from [school_3].[class].[student_25];

    Setelah optimasi, template SQL yang dihasilkan:

    SELECT * FROM [school_?].[class].[student_?];
  • Untuk instance ApsaraDB RDS for SQL Server, awalan pernyataan SQL dapat dihapus untuk membantu mengurai jenis pernyataan SQL.

    Contoh pernyataan SQL asli:

    (@P0 nvarchar(4000))select id, name from student WHERE name = @P0;

    Sebelum optimasi, template SQL yang dihasilkan:

    Template SQL yang dihasilkan: (@P0 nvarchar(?))select id, name from student WHERE name = @P0;
    Jenis pernyataan SQL yang diuraikan: p0

    Setelah optimasi, template SQL yang dihasilkan:

    Template SQL yang dihasilkan: SELECT id,name FROM student WHERE name=?;
    Jenis pernyataan SQL yang diuraikan: select
  • Jumlah spasi dapat diminimalkan, sementara huruf besar/kecil kata kunci dalam pernyataan SQL asli dipertahankan tanpa memengaruhi sintaksis. Tidak diperlukan konversi huruf besar/kecil.

    Contoh pernyataan SQL asli:

    select `name` from `student` 
      where `id` = 1 and (`name` = 'xiaoming' or `class` = 2);

    Sebelum optimasi, template SQL yang dihasilkan:

    SELECT `name` FROM `student` WHERE `id` = ?  AND (`name` = ?  OR `class` = ?)

    Setelah optimasi, template SQL yang dihasilkan:

    SELECT `name` FROM `student` WHERE `id`=?  AND (`name`=?  OR `class`=?);
  • Semua tanda kurung (()) dalam pernyataan SQL asli dipertahankan.

    Contoh pernyataan SQL asli:

    select `name` from `student` where `id` = 1 and (`name` = 'xiaoming');

    Sebelum optimasi, template SQL yang dihasilkan:

    SELECT `name` FROM `student` WHERE `id` = ?  AND `name` = ?

    Setelah optimasi, template SQL yang dihasilkan:

    SELECT `name` FROM `student` WHERE `id`=?  AND (`name`=?);
  • Tanda kurung (()) yang mengelilingi ekspresi case tidak lagi dikonversi menjadi "AS".

    Contoh pernyataan SQL asli:

    select `name`, ( CASE WHEN score > 90 THEN 'A' END ) `grade` from `student`;

    Sebelum optimasi, template SQL yang dihasilkan:

    SELECT `name` , CASE  WHEN score > ?  THEN ?  END AS `grade` FROM `student`

    Setelah optimasi, template SQL yang dihasilkan:

    SELECT `name`,(CASE WHEN score>?  THEN ?  END)`grade` FROM `student`;
  • Konten setelah tanda pagar (#) dapat diuraikan dengan benar.

    Contoh pernyataan SQL asli:

    select `name`, `#grade` from `student`;

    Sebelum optimasi, template SQL yang dihasilkan:

    SELECT `name`, `

    Setelah optimasi, template SQL yang dihasilkan:

    SELECT `name`,`#grade` FROM `student`;
  • Saat DAS memproses pernyataan SQL terpotong, semua konten dalam tanda kurung yang tidak berpasangan dibuang untuk mengurangi jumlah template.

    Contoh pernyataan SQL asli:

    select `name`, `grade` from `student` where id = (select uid from 

    Sebelum optimasi, template SQL yang dihasilkan:

    select `name`, `grade` from `student` where id = (select uid from

    Setelah optimasi, template SQL yang dihasilkan:

    SELECT `name`,`grade` FROM `student` WHERE id=
  • Ekspresi serupa digabungkan untuk mencegah perluasan template akibat banyaknya ekspresi serupa.

    Contoh pernyataan SQL asli:

    SELECT 
        CASE 
            WHEN score >= 90 THEN 'A'
            WHEN score >= 80 THEN 'B'
            WHEN score >= 70 THEN 'C'
            WHEN score >= 60 THEN 'D'
            ELSE 'F'
        END AS grade
    FROM 
        students;

    Sebelum optimasi, template SQL yang dihasilkan:

    SELECT CASE  WHEN score >= ?  THEN ?  WHEN score >= ?  THEN ?  WHEN score >= ?  THEN ?  WHEN score >= ?  THEN ?  ELSE ?  END AS grade FROM students

    Setelah optimasi, template SQL yang dihasilkan:

    SELECT CASE WHEN score>=?  THEN ?  ELSE ?  END AS grade FROM students;

Dampak

  • Saat Anda memanggil operasi DescribeSlowLogs atau DescribeSlowLogRecords setelah optimasi, nilai parameter SQLHash yang sesuai dengan parameter SQLText berubah.

  • Saat Anda memanggil operasi GetFullRequestStatResultByInstanceId atau GetAsyncErrorRequestListByCode setelah optimasi, nilai parameter SqlId berubah.