Giới thiệu
Hàm unlikely(X) trong SQLite là gợi ý cho trình tối ưu hóa truy vấn (query planner) rằng biểu thức X hiếm khi đúng. Nó không thay đổi kết quả truy vấn mà chỉ ảnh hưởng đến kế hoạch thực thi.
Bước 1 & 2: Tạo dự án và Giao diện
Giao diện giống các ví dụ SQLite trước: EditText tên, lương, các nút CRUD, ListView.
Bước 3: MainActivity.java
Code tương tự, khởi tạo DatabaseHelper.
Bước 4: DatabaseHelper.java - Sử dụng unlikely()
package com.example.andy.myapplication;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "salaryDatabase9";
public static final String CONTACTS_TABLE_NAME = "SalaryDetails";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 2);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + CONTACTS_TABLE_NAME +
"(id INTEGER PRIMARY KEY, name TEXT, salary REAL, datetime DEFAULT CURRENT_TIMESTAMP)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + CONTACTS_TABLE_NAME);
onCreate(db);
}
public boolean insert(String name, String salary) {
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("name", name);
cv.put("salary", salary);
db.replace(CONTACTS_TABLE_NAME, null, cv);
return true;
}
// QUAN TRỌNG: Sử dụng unlikely(name) - trả về giá trị name nhưng gợi ý optimizer
public ArrayList<String> getAllContacts() {
SQLiteDatabase db = getReadableDatabase();
ArrayList<String> array_list = new ArrayList<>();
// unlikely() trả về chính đối số của nó, nhưng đánh dấu là "hiếm khi true"
Cursor res = db.rawQuery("SELECT unlikely(name) AS fullname FROM " + CONTACTS_TABLE_NAME, null);
res.moveToFirst();
while (!res.isAfterLast()) {
if (res != null && res.getCount() > 0) {
array_list.add(res.getString(res.getColumnIndex("fullname")));
}
res.moveToNext();
}
res.close();
return array_list;
}
public boolean update(String name, String salary) {
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("name", name);
cv.put("salary", salary);
return db.update(CONTACTS_TABLE_NAME, cv, "name = ?", new String[]{name}) > 0;
}
public boolean delete() {
getWritableDatabase().execSQL("DELETE FROM " + CONTACTS_TABLE_NAME);
return true;
}
}
Giải thích unlikely()
- Cú pháp:
unlikely(X)tương đươngXnhưng gợi ý optimizer rằng X hiếm khi khác 0/true. - Cặp đôi:
likely(X)- gợi ý X thường đúng. - Tác dụng: Giúp query planner chọn index phù hợp hơn khi X là điều kiện WHERE.
- Trong SELECT: Như ví dụ này,
unlikely(name)trả về giá trị name bình thường, chỉ khác ở metadata cho optimizer. - Lưu ý: Chỉ có tác dụng khi dùng trong mệnh đề WHERE/JOIN, trong SELECT thì không ảnh hưởng kế hoạch.
Chạy ứng dụng

Hiển thị tên nhân viên (giá trị của unlikely(name) = name).