PDA

View Full Version : hỏi cách tối ưu count số sản phẩm



hcg
22-01-2012, 01:52
danh mục tìm kiếm sản phẩm có nhiều tiêu chí khác nhau , mình dùng count để đếm số sản phẩm theo điều kiện tìm của người dùng . khi dữ liệu nhiều lên khoảng vài trăm ngàn dòng thì cách này khiến cho truy xuất rất chậm . vậy mình cần dùng cách nào để tối ưu

ví dụ như ở cột trái vatgia , ebay ...

predator0906
22-01-2012, 22:56
Bạn nói chưa rõ lắm. Không hiểu bạn lưu trên file hay dùng dbms & bạn dùng ngôn ngữ gì.

hcg
23-01-2012, 00:11
chào bạn,

dạng thống kê số kết quả tài sản tìm kiếm được như cột trái hình đính kèm

11530

mình sử dụng MsSql 2005 và ngôn ngữ c#.net , các dữ liệu đều lưu ở database và khi người dùng chọn chủng loại thì cũng query trực tiếp đến database để lấy ra dữ liệu

predator0906
23-01-2012, 08:59
Nếu chỉ cần đếm thôi thì bạn có thế giao cho csdl đếm số lượng: select count(*) from ... where ...

Còn nếu muốn vừa select ra kết quả & đếm số lượng thì bạn select vào DataTable, sau đó dùng thuộc tính Rows.Count của DataTable để lấy ra số lượng kết quả;

DataTable dt;
.....//Lấy kết quả select vào dt

Khi đó số lượng là dt.Rows.Count.

Các cột có trong điều kiện where của select bạn nên tạo index cho chúng để phép so sánh điều kiện select đc nhanh chóng.

Nếu điều kiện là cố định theo menu của bạn thì nếu muốn nhanh nữa, bạn có thể tạo 1 table mới Count_Product(ID, Name, Number), mỗi khi insert một sản phẩm vào csdl thì bạn cũng update số lượng sản phẩm đó trong table Count_Product dựa vào điều kiện của sp đó. Vậy khi cần lấy ra số lượng thì có thể select ra từ table Count_Product & ko cần kết với table nào khác.


Không rõ bạn đã làm ntn?

hcg
23-01-2012, 13:59
cám ơn bạn nhé. mình làm giống cách của bạn , khi chạy với dữ liệu ít thì rất tốt nhưng khi dữ liệu lên nhiều khoảng vài trăm ngàn dòng thì truy cập bị rất chậm .

về cách tạo 1 bảng riêng để lưu số đếm thì có nhiều tiêu chí khác nhau khi người dùng tìm kiếm:
ví dụ:
Thành phố:
HCM | 12000
HN | 11000

Loại máy tính:
Máy để bàn | 20000
Máy xách tay | 10000

Màn hình:
13 inch | 20000
15 inch | 12000

....

người dùng không tìm kiếm gì, số màn hình & thành phố & loại máy tính là số tổng. (ok)
người dùng tìm máy tính xách tay , khi đó số màn hình và thành phố là 1 số khác so với số tổng. ( chỗ này chưa biết lưu thế nào )
người dùng tìm máy tính xách tay và thành phố , khi đó số màn hình lại là 1 số khác nữa. ( chỗ này chưa biết lưu thế nào )

nếu kết hợp lưu tất cả các điều kiện lồng nhau thì khi đó nó bị n x n tiêu chí tìm kiếm và cho ra n kết quả .

longvnit
28-01-2012, 15:30
Cách sử dụng COUNT chỉ áp dụng khi lượng DB nhỏ, độ phức tạp của danh mục thấp. Còn nếu làm như @predator0906 có thể áp dụng khi danh mục không phức tạp và bạn có thể các loại NoSQL để lưu trử thay vì SQL.
Ở các ứng như như Vật Giá, enbac, rongbay thì đa phần đều dùng Lucene và "faceting algorithm" :)
Bạn có thể ngâm cứu theo cụm từ trên để áp dụng vào ứng dụng của bạn !