Tôi đang cố gắng đặt một chỉ mục trên một cột sẽ giữ URL. Vì độ dài tối đa của một URL dài hơn 2000 ký tự nên tôi đặt kiểu dữ liệu là NVARCHAR (3000). Khi tôi đã làm điều này tôi đã nhận được lỗi The total size of an index or primary key cannot exceed 900 bytes
. Vì tôi có thể cần phải tìm kiếm các bản ghi bằng URL, tôi sẽ cần một chỉ mục trên Cột URL của tôi. Có cách nào xung quanh giới hạn này không?Máy chủ SQL: Tổng kích thước của chỉ mục hoặc khóa chính không thể vượt quá 900 byte
Trả lời
Bạn có thể tạo cột được tính cho tổng kiểm tra của URL và sau đó sử dụng tổng kiểm tra trong truy vấn. Checksums sẽ không phải là duy nhất, nhưng nó sẽ nhanh chóng thu hẹp số lượng các trận đấu có thể.
Đầu tiên, thêm một cột tính để bàn của bạn, như thế này:
Alter Table YourTableName Add URL_HASH As CheckSum(URL)
Bây giờ chỉ số cột như thế này:
Create Index idx_YourTableName_URL_HASH On YourTableName(URL_HASH)
Bây giờ bạn có thể viết một truy vấn mà sẽ làm một chỉ mục tìm kiếm để tìm hàng bạn đang tìm kiếm:
Select URL
From YourTableName
Where URL_HASH = CheckSum(N'google.com')
And URL = 'google.com'
Phương pháp này sẽ hoạt động rất tốt để khớp chính xác es. Nếu bạn muốn kết hợp từng phần, bạn nên sử dụng chức năng tìm kiếm toàn văn.
Cảm ơn chúng tôi đã quyết định thực hiện điều này. – Luke101
Hi G Mastros. Cảm ơn câu trả lời của bạn. Tôi có cột Varbinary chứa rất nhiều dữ liệu. Cột này có thể là null và tôi có truy vấn tìm kiếm các bản ghi trong đó cột này không phải là rỗng. Phương pháp kiểm tra của bạn dường như rất hữu ích trong trường hợp này. Tôi đã kiểm tra rằng checksum cho cột nullable là 2147483647. Mặc dù nó có thể làm việc nhưng nó có vẻ lạ để mã cứng số này trong các truy vấn. Liệu con số này có giống nhau khi chúng ta chuyển sang phiên bản SqlServer khác không? Tôi đã tự bắn vào chân một khi sử dụng phương pháp GetHashCode trong C# và nó kết thúc nó trả về giá trị khác nhau phụ thuộc vào hệ điều hành. – Mariusz
Tôi thực sự không biết chắc chắn. Tuy nhiên, thay vì hardcoding số bạn có thể sử dụng "checksum (Convert (varbinary, null))". Sau đó, nếu giá trị thay đổi với phiên bản db, bạn sẽ vẫn được bảo vệ. –
Tìm kiếm Toàn văn SQL Server là những gì bạn có thể sẽ muốn.
http://msdn.microsoft.com/en-us/library/ms142571.aspx
Bạn cần phải nhảy qua một số hoops nhỏ với cài đặt nó lên vs một chỉ số đơn giản nhưng nó không phải là siêu cứng.
- 1. Máy chủ SQL - có giá trị lập chỉ mục các khóa chuỗi lớn?
- 2. "Tổng số khóa vượt quá kích thước bảng khóa" Xóa 267 Bản ghi
- 3. Máy chủ SQL Kích thước hàng tối đa
- 4. Cấp phát bộ nhớ vượt quá. Phản hồi của máy chủ là: 4.3.1 Kích thước tin nhắn vượt quá kích thước tin nhắn tối đa cố định
- 5. Vượt quá kích thước địa chỉ email tối đa
- 6. khóa chính và chỉ mục sql
- 7. Chỉ mục được lọc của máy chủ SQL
- 8. Khoá chính của máy chủ SQL View
- 9. Kích thước bảng và chỉ mục trong SQL Server
- 10. kích thước dữ liệu Cookie vượt 4K - Nhưng 'chỉ' 1100 byte của nó được mã hóa
- 11. Nowjs: [RangeError: kích thước gọi stack tối đa vượt quá]
- 12. ID đối tượng khóa máy chủ Sql quá lớn
- 13. Cách nhận kích thước byte của chuỗi nhiều byte
- 14. Kích thước gói đẩy từ xa Github vượt quá
- 15. máy chủ sql: tạo chỉ mục trên các khóa ngoài khi cần thiết
- 16. OutofMemoryError: kích thước bitmap vượt quá ngân sách VM (Android)
- 17. MySQL chính/kích thước khóa ngoài?
- 18. java.lang.OutOfMemoryError: kích thước bitmap vượt quá ngân sách VM
- 19. Máy chủ SQL - Hiệu suất/Kích thước Nhược điểm của các Cột Null
- 20. Kích thước chỉ mục trong MySQL
- 21. Kích thước bitmap vượt quá lỗi ngân sách Vm android
- 22. Làm cách nào tôi có thể quản lý kích thước nhật ký máy chủ SQL
- 23. OutOfMemoryError: kích thước bitmap vượt quá ngân sách VM: - Android
- 24. IIS7 - WebRequest thất bại với 404,13 khi kích thước của params yêu cầu vượt quá 30MB
- 25. Máy chủ SQL không thể tìm thấy Chứng chỉ
- 26. Nhận tổng số của tất cả các kích thước cơ sở dữ liệu trong SQL Server
- 27. Tại sao kích thước của bản ghi không bằng với tổng kích cỡ của các trường?
- 28. Làm cách nào để giảm kích thước tệp nhật ký máy chủ sql của tôi?
- 29. Phân vùng máy chủ SQL - Lỗi chỉ mục duy nhất
- 30. Lấy kích thước của hình ảnh mà không tải, từ máy chủ web
Điều đó thực sự không có hiệu quả với tôi. Trong thực tế, nó âm thanh như một cơn ác mộng hoàn chỉnh cho động cơ DB để quản lý. Bạn đã thiết lập rằng bạn * cần * cần phải tìm kiếm bằng URL và tìm kiếm này sẽ bị chậm? Tìm kiếm văn bản có thể khá nhanh chóng mà bạn biết. Ngoài ra còn có khả năng bạn có thể chia nhỏ URL thành các bit, chỉ lập chỉ một trong số các bit đó (một số thay đổi nhiều nhất) và sau đó liên kết phần chỉ mục với toàn bộ url. Trong ngắn hạn có rất nhiều chiến lược có thể ở đây. – Robinson