Khi nào chỉ số băm trở nên hợp lý?


4

MySQL vốn không hỗ trợ các chỉ mục băm.Vì vậy, tạo một cột băm giả và tạo một chỉ mục trên cột băm cần một số suy nghĩ.

Và dường như được hiểu rộng rãi rằng nếu trường văn bản dài thì băm có giá trị trên đầu họ yêu cầu.Nhưng văn bản nên dài bao nhiêu để bắt đầu suy nghĩ về hàm băm?

Nếu tôi có ý định sử dụng hàm băm 128 bit thì có bao nhiêu ngưỡng ký tự sẽ là mức tối thiểu đủ cho một cột văn bản?

Chỉnh sửaChi tiết được liệt kê trong câu hỏi khác của tôi có thể hữu ích https://stackoverflow.com/questions/7403167/index-on-url-or-hashing-considering-ram

  0

Yêu cầu của bạn là gì?Một chỉ mục chỉ xuất hiện khi có các truy vấn ở dạng mà trình tối ưu hóa truy vấn sẽ sử dụng chúng.Bản chất của dữ liệu trong câu hỏi là gì?Loại truy vấn nào bạn sẽ thực hiện liên quan đến dữ liệu này? 14 sep. 112011-09-14 18:18:53

  0

Dưới đây là mô tả của dự án http://stackoverflow.com/questions/7403167/index-on-url-or-hashing-considering-ram 14 sep. 112011-09-14 18:49:42

3

Nó bắt đầu trở nên hợp lý khi nó bắt đầu lưu đĩa của bạn.Nhưng đồng thời nó bắt đầu có sức mạnh tính toán của bạn.

Ngày nay dung lượng đĩa được coi là rẻ nhưng nếu bạn đang sử dụng SSD thì nó không rẻ.Vì bạn cần kết hợp chính xác nên nó sẽ không tốn quá nhiều CPU nên có thể là một lựa chọn tốt hơn.

Và câu trả lời chính xác cho câu hỏi của bạn về độ dài của cột văn bản để đáp ứng việc sử dụng băm có thể thay đổi dựa trên nhiều yếu tố bắt đầu từ kỹ năng của DBA để tải trên hệ thống.

Nhưng nếu bạn tiết kiệm hơn 50% RAM bằng cách sử dụng băm và tổng tiết kiệm RAM ít nhất là 2GB thì tôi nghĩ có thể đáng để đi theo con đường này nếu không nó có thể là một buổi diễn tập không cần thiết.


3

Tôi không chắc lý do nào khiến bạn muốn có chỉ số băm.

Nhưng nếu bạn đang tìm kiếm các cột văn bản/cột varar lập chỉ mục thì bạn có thể đi với MyISAM/toàn văn hoặc bạn có thể sử dụng một cái gì đó bên ngoài như Sphinx hoặc Lucene.

Ngoài ra, bạn có thể tạo một cột bổ sung với phiên bản băm của một cột khác và miễn là 1000 byte hoặc ít hơn, thì nó có thể được lập chỉ mục bởi MySQL.

Tôi hy vọng tôi đã trả lời câu hỏi của bạn.

  0

Lý do tôi tìm kiếm chỉ số băm giả là vì bảng của tôi chứa hơn 150 triệu bản ghi và tôi có bộ nhớ hạn chế (8GB) nên tôi muốn tối ưu hóa các chỉ mục của mình và không muốn đặt chỉ mục trên cột văn bản vì nó sẽ ăn quá nhiều RAM. 14 sep. 112011-09-14 17:55:51

  0

Bạn có thể (và phải) chỉ định số lượng ký tự của cột văn bản bạn muốn lập chỉ mục.Như trong mytextcolumn (1000) - 1000 là giới hạn.Tôi sẽ để MySQL xử lý phần bộ nhớ vì nó rất tốt ở bên đó.Ngoài ra, sử dụng Sphinx cho những điều này có lẽ sẽ là công cụ phù hợp nhất cho công việc. 15 sep. 112011-09-15 06:58:59

  0

Tại sao tôi nên đặt chỉ mục trên cột văn bản khi nó có độ dài thay đổi thay vì tạo cột băm và đặt ràng buộc duy nhất trên cột băm.Chỉ có vấn đề trong việc đưa chỉ mục lên cột băm là giảm thiểu va chạm càng thấp càng tốt. 15 sep. 112011-09-15 16:42:11

  0

Bạn có thể tạo một cột băm khác và lập chỉ mục nó cũng như thêm mã của riêng bạn vào ứng dụng của bạn để tìm kiếm theo cách đó.Tôi chỉ muốn nói rằng đây là một vấn đề đã được giải quyết bằng các công cụ khác và phần lớn đã được xác minh bởi những người khác.Nếu bạn muốn xem cách của bạn hoạt động và ít phức tạp hơn, thì tất cả các phương tiện của tôi, hãy thử xem. 16 sep. 112011-09-16 10:41:14

  0

Trên thực tế những công cụ này dành cho giải pháp tìm kiếm toàn văn bản như nhân sư.Nhưng tôi quan tâm hơn ở đây để biết khi nào nó trở nên khả thi khi lấy 16 byte băm.Giống như, thay vì lưu trữ 100 byte cột văn bản (khi thêm chỉ mục), sử dụng 16 byte là xứng đáng.Và quan trọng nhất là chỉ có trận đấu chính xác được yêu cầu không quét phạm vi. 16 sep. 112011-09-16 18:45:01


0

Đọc xong mô tả của bạn, tôi có thể thấy một hàm băm sẽ có ý nghĩa như thế nào.Tuy nhiên, khi bạn nói về bộ nhớ, sử dụng kích thước của một cột chỉ mục không làm cho việc tìm kiếm một tập dữ liệu lớn không thể thực hiện được.Công nghệ chỉ số cơ bản của mysql là btree.Btrees chia và chinh phục.

Lời khuyên cụ thể tôi có thể đưa ra là: giả sử bạn sẽ sử dụng hàm băm md5().Để đạt hiệu quả tối đa, bạn nên đặt hàm băm là khóa chính của các bảng công cụ innodb trong đó hàm băm là char (32).Vì trọ .

  0

Khi mục đích là để tiết kiệm RAM thì sử dụng InnoDB sẽ là một quyết định sáng suốt? 15 sep. 112011-09-15 16:44:51