2010-04-03 37 views
8

Ví dụ: người dùng ứng dụng của chúng tôi muốn tìm kiếm sản phẩm bằng cách nhập từ khóa productName.Có phương pháp tìm kiếm nào tốt hơn thay vì string.Contains ("keyword") sử dụng asp.net không?

Bảng sản phẩm của cơ sở dữ liệu máy chủ sql chứa khoảng 10 triệu bản ghi.

Có phương pháp tìm kiếm hiệu quả hơn và cao hơn để triển khai thay vì productName.Contains ("từ khóa") sử dụng asp.net C# không?

Tôi đang sử dụng các thủ tục được lưu trữ ngay bây giờ, nhưng LINQ to sql hoặc khung thực thể cũng là một khả năng.

+1

công nghệ gì bạn đang sử dụng để truy cập cơ sở dữ liệu? –

+0

Tôi sử dụng thủ tục lưu trữ ngay bây giờ, nhưng LINQ to sql hoặc khung thực thể sẽ được phép sử dụng. – Mike108

Trả lời

5

Nếu bạn muốn hiệu suất tốt hơn thì bạn có thể nhìn vào một full text search. Lưu ý rằng điều này hiện không được LINQ to SQL hỗ trợ nhưng bạn có thể viết SQL trong một thủ tục được lưu trữ và gọi thủ tục được lưu trữ từ ứng dụng của bạn. Câu trả lời được chấp nhận cho this StackOverflow post khuyên bạn nên đọc this article.

3

Vâng, bạn có thể đạt được điều này từ phía db sử dụng một cái gì đó NHƯ

LIKE (Transact-SQL)

như

DECLARE @Table TABLE(
     Val VARCHAR(50) 
) 

INSERT INTO @Table SELECT 'asdf' 
INSERT INTO @Table SELECT 'tada' 
INSERT INTO @Table SELECT 'foo' 
INSERT INTO @Table SELECT 'bar' 
INSERT INTO @Table SELECT 'test' 
INSERT INTO @Table SELECT 'test foo' 

DECLARE @Lookup VARCHAR(50) 
SELECT @Lookup = 'foo' 

SELECT * 
FROM @Table 
WHERE Val LIKE '%' + @Lookup + '%' 
+0

Có phương pháp tìm kiếm hiệu suất cao hơn và tốt hơn so với "Thích" sql không? – Mike108

0

Bạn không bao giờ nên tìm nạp thêm dữ liệu từ cơ sở dữ liệu của mình hơn mức bạn cần. Vì vậy, tốt nhất là bạn nên hạn chế các hàng bên trong lớp dữ liệu (ví dụ: thủ tục lưu sẵn của bạn). Bạn có thể làm điều này bằng cách chỉ trả về các hàng phù hợp:

SELECT * FROM Products WHERE ProductName LIKE '%' + @keyword + '%' 

Trường hợp @keyword là tham số cho quy trình lưu trữ của bạn.

Nhưng lưu ý rằng hiệu suất sử dụng LIKE có thể chậm, vì nó phải đọc toàn bộ bảng. Bạn có thể tốt hơn hiệu suất hơn bằng cách kết hợp các sản phẩm bắt đầu với từ khóa:

SELECT * FROM Products WHERE ProductName LIKE @keyword + '%' 

Lưu ý tôi loại bỏ các '%' trước @keyword. Điều này cho phép SQL Server sử dụng một chỉ mục trên cột ProductName để tìm các hàng nhanh hơn nhiều!

Fore thêm trợ giúp, xin vui lòng gửi thủ tục lưu trữ của bạn ...

0

có thể là overkill nhưng hãy kiểm tra lucene.net, tôi tin rằng đó là những gì ngăn xếp tràn sử dụng để tìm kiếm nó

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