2010-07-27 22 views
13

Tôi có một cơ sở dữ liệu với rất nhiều từ được sử dụng trong hệ thống thẻ. Tôi đã tạo mã cần thiết cho hộp tự động hoàn tất, nhưng tôi không chắc chắn về cách tìm nạp các mục phù hợp từ cơ sở dữ liệu theo cách hiệu quả nhất.Cách tìm nạp các mục bắt đầu bằng chuỗi đã cho từ cơ sở dữ liệu SQL Server?

Tôi biết lệnh LIKE, nhưng có vẻ như với tôi rằng đó là một lệnh EQUAL. Tôi chỉ nhận được những từ trông giống như từ tôi nhập vào. Kế hoạch của tôi là đọc mọi hàng, sau đó sử dụng các hàm string.StartsWith() và string.Contains() của C# để tìm các từ phù hợp, nhưng tôi nghĩ rằng với một cơ sở dữ liệu lớn, nó có thể không hiệu quả đọc từng hàng và sau đó lọc chúng.

Có cách nào để chỉ đọc các hàng bắt đầu bằng hoặc chứa một chuỗi nhất định từ SQL Server không?

Trả lời

29

Khi sử dụng như thế, bạn cung cấp ký hiệu% làm ký tự đại diện. Nếu bạn muốn chuỗi bắt đầu bằng Hello, bạn sẽ sử dụng LIKE 'Hello%' Nếu bạn muốn chuỗi có Hello ở bất kỳ đâu trong chuỗi, bạn sẽ sử dụng LIKE '% Hello%'

Về hiệu quả, việc sử dụng Like không phải là tối ưu . Bạn nên xem xét tìm kiếm toàn văn.

+0

Tôi thực sự biết về dấu%. Sự ngớ ngẩn của tôi. Tôi cũng sẽ xem xét tìm kiếm toàn văn. Cảm ơn! –

2

Bạn có thể sử dụng CONTAINS trong T-SQL, nhưng tôi chắc chắn bạn phải sử dụng lập chỉ mục toàn văn cho bảng có liên quan trong truy vấn của bạn.

Contains

Getting started with Full-Text Search

8

tôi biết lệnh LIKE, nhưng có vẻ như với tôi rằng nó là nhiều hơn một lệnh EQUAL. Tôi chỉ nhận được những từ trông giống như từ tôi nhập vào.

Đó là bởi vì bạn không sử dụng ký tự đại diện:

WHERE column LIKE 'abc%' 

... sẽ trả lại hàng trong đó giá trị column bắt đầu với "abc". Tôi sẽ chỉ ra rằng khi sử dụng ký tự đại diện, đây là phiên bản duy nhất có thể sử dụng chỉ mục trên cột column ... er.

WHERE column LIKE '%abc%' 

... sẽ trả về các hàng có giá trịchứa "abc" ở bất kỳ đâu trong đó. Ký tự đại diện phía bên trái của LIKE đảm bảo rằng không thể sử dụng chỉ mục.

Máy chủ SQL không hỗ trợ các biểu thức thông thường - bạn phải sử dụng các hàm CLR để truy cập vào chức năng. Nhưng nó thực hiện ngang bằng với LIKE.

Tìm kiếm toàn văn bản (FTS) là phương tiện tìm kiếm văn bản tốt nhất.

+0

Nếu những gì bạn tìm kiếm là ký tự gạch dưới, bạn cần phải thoát khỏi nó: WHERE cột LIKE '/ _%' ESCAPE '/' – Tommy

2

Bạn cũng có thể thực hiện một chức năng StartWith sử dụng những điều khoản sau đây:

Sử dụng một trong những Mà thực hiện tốt nhất.

Các vấn đề liên quan