Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ค้นหาข้อมูลที่ลงท้ายด้วยค่าที่กำหนดใน MySQL ด้วย LIKE

เมื่อต้องการค้นหาเรคคอร์ดที่คอลัมน์สตริงลงท้ายด้วยค่าเฉพาะ (Suffix Search) ให้ใช้ตัวอักษร Universal % (Wildcard) หน้าค่าที่ต้องการค้นหาในคำสั่ง LIKE

สร้างตารางและข้อมูล ClientId

mysql> create table DemoTable (ClientId varchar(20));
mysql> insert into DemoTable values('CLI-101'),('CLI-110'),('CLI-201'),('CLI-210'),('CLI-502'),('CLI-1010'),('CLI-1012');

ข้อมูลในตาราง

+----------+
| ClientId |
+----------+
| CLI-101  |
| CLI-110  |
| CLI-201  |
| CLI-210  |
| CLI-502  |
| CLI-1010 |
| CLI-1012 |
+----------+

ค้นหาลงท้ายด้วย 10 หรือ 12

mysql> select * from DemoTable where ClientId like '%10' or ClientId like '%12';

ผลลัพธ์

+----------+
| ClientId |
+----------+
| CLI-110  |
| CLI-210  |
| CLI-1010 |
| CLI-1012 |
+----------+

รูปแบบ Wildcard

Patternความหมายตัวอย่าง Match
%10ลงท้ายด้วย 10110, 1010, 210
10%ขึ้นต้นด้วย 1010, 101, 100
%10%มี 10 อยู่กลาง110, 101, 9102
_10ลงท้าย 10 ความยาว 3 ตัว110, 210 (ไม่ใช่ 1010)

ประสิทธิภาพและ Index

  • LIKE 'prefix%' - ใช้ Index ได้ (Prefix Index)
  • LIKE '%suffix' - ไม่ใช้ Index (Full Table Scan)
  • LIKE '%middle%' - ไม่ใช้ Index

ทางเลือกที่ดีกว่าสำหรับ Suffix Search

  • Reverse Index - สร้างคอลัมน์เก็บสตริงกลับ (REVERSE) แล้ว Index แบบ Prefix
  • Fulltext Search - สำหรับข้อความยาว
  • Generated Column - MySQL 5.7+ สร้างคอลัมน์คำนวณ REVERSE แล้ว Index
  • RIGHT(ClientId, 2) = '10' - อ่านง่ายกว่า LIKE แต่ไม่ใช้ Index

ตัวอย่าง Generated Column สำหรับ Suffix Search

ALTER TABLE DemoTable 
ADD COLUMN ClientId_Reversed VARCHAR(20) 
GENERATED ALWAYS AS (REVERSE(ClientId)) STORED;

CREATE INDEX idx_reversed ON DemoTable(ClientId_Reversed);

-- ค้นหา: WHERE ClientId_Reversed LIKE '01%' (01 = 10 กลับ)
SELECT * FROM DemoTable WHERE ClientId_Reversed LIKE '01%';