2009-12-24 26 views
5

Hầu hết các trang web có một số loại tiểu sử người dùng sẽ làm điều gì đó như thế này:Điều gì là tốt nhất cho một hồ sơ, một số hoặc một tên?

profile.php u = 123445

hoặc khác:

profile.php u = jason? .Davis

Vì vậy, tôi tò mò, nó sẽ chậm hơn để sử dụng một tên để tra cứu một hồ sơ với php/mysql so với sử dụng một số để tìm kiếm một hồ sơ cá nhân?

Trả lời

12

Tra cứu chuỗi thực sự có thể chậm hơn số một trong mọi trường hợp. Nhưng sự khác biệt là quá nhỏ nó sẽ không bao giờ được nhận thấy. Không cho đến khi bạn có thực sự số lượng người dùng lớn.

Nhưng hãy xem SO: Họ làm cả hai.

http://stackoverflow.com/users/187606/pekka 

Số để truy cập cơ sở dữ liệu nhanh.

Tên cho giao diện đẹp và khả năng hiển thị của công cụ tìm kiếm.

Không có xung đột với hai tên, vì ID là những gì được sử dụng để tìm kiếm hồ sơ.

Tôi nghĩ đó là điều tốt nhất của cả hai thế giới và tối ưu. Tuy nhiên,

Yêu cầu viết lại URL.

+0

Tại sao số nhanh hơn tên trong tra cứu db? (Giả sử cả hai đều được lập chỉ mục). –

+0

Tôi không có chuyên gia về cơ sở dữ liệu, nhưng thông thường cho tôi biết rằng ngay cả chỉ mục (đó là chuyển đổi một phần của chuỗi thành số bản ghi) phải luôn chậm hơn tham chiếu trực tiếp đến số bản ghi. Không đáng kể chậm hơn, nhưng vẫn chậm hơn. Đúng nếu tôi nhầm. –

+3

@Esteban, một số có nhiều khả năng sẽ được lưu trữ dưới dạng số nguyên chiều rộng cố định (nói 4 byte) trái ngược với chuỗi 32 byte (ví dụ). Việc so sánh sẽ nhanh hơn vì có ít dữ liệu hơn, nhưng quan trọng hơn, mỗi trang của chỉ mục sẽ lưu trữ nhiều bản ghi hơn, dẫn đến I/O đĩa ít hơn. – paxdiablo

-1

Nếu tên là khóa trong cơ sở dữ liệu, thời gian tra cứu không được quá khác nhau và sử dụng tên sẽ cung cấp cho bạn URL đẹp hơn, vì vậy tôi khuyên bạn nên sử dụng tên.

+0

Tên tốt hơn không phải là chìa khóa trong cơ sở dữ liệu, hoặc bạn sẽ gặp vấn đề khi một ví dụ khác John Smith cố mở một tài khoản. –

+0

Trừ khi tất nhiên, bạn vui lòng trao tên người dùng như John.Smith.76352574763 :-) – paxdiablo

+0

Chờ đợi, ý của bạn là hầu hết các trang web đều cho phép bạn mở hai tài khoản có cùng tên? –

2

Tên sẽ dễ đọc hơn và dễ gỡ lỗi hơn, nhưng tên không được đảm bảo là duy nhất, vì vậy, tên sẽ cần được tăng cường bởi người uniqifier (tôi tin đây thực sự là một từ, được sử dụng để thống nhất). chắp thêm chữ số vào cuối tên.

0

Nếu bạn sử dụng chỉ mục DB, nó sẽ không chậm hơn đáng kể. Nhưng điều gì sẽ xảy ra nếu bạn có hai Jason Davises? UID là tốt đẹp bởi vì bạn có thể đảm bảo tính duy nhất.

1

Vấn đề chính tôi thấy khi sử dụng tên không phải là tốc độ tra cứu, nhưng thực tế là bạn không thể có Jason Davis từ Omaha, Nebraska và Jason Davis khác từ Perth, Tây Úc.

Bằng mọi cách, hãy sử dụng tên trong mọi thứ mà thế giới có thể nhìn thấy, nhưng để đảm bảo tính duy nhất, tôi sẽ sử dụng một số nguyên ID. Điều này cũng có thể tăng tốc độ truy vấn cơ sở dữ liệu là tốt, nhưng đó sẽ là một mối quan tâm thứ cấp đối với tôi. Đó là nghi ngờ bằng cách sử dụng một chuỗi sẽ gây ra quá nhiều angst cho ứng dụng của bạn.

0

Cả hai đều sai. Bạn không muốn lấy profile.php cho u = 12345 làm tham số. Bạn muốn lấy hồ sơ của người dùng 12345. Vì vậy, sử dụng/profile/12345.

đọc một cái gì đó về REST, đó là mát mẻ :)

0

nó sẽ chậm hơn để sử dụng một tên để tra cứu một tiểu sử trên [...]?

Nếu bạn đã thử nghiệm nó, bạn đã phát hiện ra rằng không có đủ sự khác biệt đáng để nó đáng lo ngại. Nếu bạn lo ngại về hiệu suất thì đây sẽ là điều cuối cùng khiến bạn lo lắng.

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