2012-09-03 16 views
5

Tôi đang lưu một số văn bản trong cơ sở dữ liệu có 1000 ký tự. Nhưng tôi chỉ hiển thị 200 ký tự đầu tiên.Phương pháp mysql nào nhanh?

Phương pháp 1
tôi có thể tiết kiệm được 200 ký tự đầu tiên trong một cột và số còn lại trong cột thứ hai của bảng sql

Phương pháp 2
tôi có thể lưu tất cả mọi thứ trong một cột và trong khi hiển thị tôi có thể truy vấn cho 200 ký tự

+0

Tôi nghĩ ** Phương pháp 1 ** – Daya

+3

Hãy để tôi nói lại câu hỏi của chúng tôi: 'Guys, ai đó có thể làm cho profiling nghiên cứu trên cơ sở dữ liệu cho nhu cầu của tôi ';) –

Trả lời

4

Nó sẽ "sạch hơn" để lưu trữ mọi thứ trong 1 cột. và bạn có thể chọn chỉ có 200 ký tự đầu tiên như thế này

select substring(your_column, 1, 200) as your_column from your_table 
+1

Và những gì về năng suất? Nó sẽ nhanh hơn trong vòng 10 000 yêu cầu mỗi giây để gọi phương thức substring() 'của DB hơn là chọn một ô đơn giản? –

+0

'chuỗi con' là một hàm khá nhanh. Tôi nghi ngờ có những vấn đề hiệu suất với chức năng đơn giản này. Nhưng tôi đã không thử nó với một tải nặng như vậy. –

+0

Hãy xem xét kết quả tìm kiếm của google, nó thực hiện một cái gì đó như thế này. vì vậy tôi nghĩ rằng chuỗi con() có thể được sử dụng – ZenOut

1

Nó thực sự là không thích hợp, nhưng nếu bạn cố gắng để tối ưu hóa, sau đó phương pháp 1 là tốt hơn, miễn là bạn giới hạn truy vấn của bạn để cột đó (hoặc bạn chỉ truy vấn các cột này bạn thực sự cần), bởi vì làm bất kỳ substring nào ở phía máy chủ cần có thời gian và tài nguyên (số lần yêu cầu ...). Cách 2 là sạch, nhưng bạn đang tối ưu hóa cho thời gian vì vậy phương pháp 1.

0

này sẽ đi xuống để một trong hai điều:

Nếu bạn đang kéo toàn bộ hàng trở lại vào PHP và sau đó chỉ hiển thị 200 đầu tiên các ký tự, sau đó tốc độ mạng của bạn có thể là một nút cổ chai trên dữ liệu kéo trở lại:

Nếu mặt khác bạn có hai cột, bạn sẽ có khả năng bị tắc nghẽn khi truy cập ổ đĩa của bạn lấy dữ liệu về PHP của bạn - hàng dài hơn có thể khiến truy cập chậm hơn vào nhiều hàng.

Điều này sẽ giảm cân cho máy chủ cụ thể. Nó sẽ thực sự phụ thuộc vào cách máy chủ của bạn thực hiện. Tôi sẽ đề nghị chạy một số kịch bản mà mã của bạn cố gắng để kéo lại một vài trăm ngàn của mỗi để xem phải mất bao lâu.

0

Phương pháp 2.

Đầu tiên, lưu trữ bản sao của dữ liệu thường là xấu (phá hoại đạo đức). Điều này chắc chắn đúng trong trường hợp này.

Thứ hai, sẽ mất nhiều thời gian hơn để ghi vào hai bảng so với một bảng.

Thứ ba, bạn hiện đã thực hiện cập nhật và xóa dễ bị tổn thương do mâu thuẫn khó chịu (xem # 1).

Thứ tư, trừ khi bạn đang tìm kiếm 200 ký tự đầu tiên cho văn bản, việc lấy dữ liệu sẽ giống nhau cho cả hai phương pháp (chỉ cần chọn một chuỗi con của 200 ký tự đầu tiên).

Thứ năm, ngay cả khi bạn đang tìm kiếm 200 ký tự đầu tiên, bạn có thể lập chỉ mục trên các ký tự đó và tốc độ truy xuất phải giống nhau.

Thứ sáu, bạn không muốn thiết kế cơ sở dữ liệu giới hạn UX của bạn - điều gì sẽ xảy ra nếu bạn cần thay đổi 500 ký tự? Bạn sẽ có rất nhiều việc phải làm.

Đây là trường hợp rất rõ ràng về những việc không nên làm trong thiết kế cơ sở dữ liệu.

tham khảo: như đã trả lời bởi Joe Emison http://www.quora.com/MySQL/Which-mysql-method-is-fast

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