Sto provando a inserire un indice su una colonna che conterrà gli URL. Poiché la lunghezza massima di un URL è di oltre 2000 caratteri, ho impostato il tipo di dati su NVARCHAR (3000). Quando l'ho fatto ho ricevuto l'errore The total size of an index or primary key cannot exceed 900 bytes
. Dato che potrei aver bisogno di cercare i record per URL, ho bisogno di un indice sulla mia colonna URL. C'è un modo per aggirare questa limitazione?Server SQL: la dimensione totale di un indice o di una chiave primaria non può superare i 900 byte
Server SQL: la dimensione totale di un indice o di una chiave primaria non può superare i 900 byte
risposta
È possibile creare una colonna calcolata per il checksum dell'URL e quindi utilizzare il checksum nella query. I checksum non saranno unici, ma ridurranno rapidamente il numero di possibili corrispondenze.
In primo luogo, aggiungere una colonna calcolata al vostro tavolo, in questo modo:
Alter Table YourTableName Add URL_HASH As CheckSum(URL)
Ora indice di colonna in questo modo:
Create Index idx_YourTableName_URL_HASH On YourTableName(URL_HASH)
ora è possibile scrivere una query che farà un indice di ricerca per trovare la riga che stai cercando:
Select URL
From YourTableName
Where URL_HASH = CheckSum(N'google.com')
And URL = 'google.com'
Questo metodo dovrebbe funzionare molto bene per la corrispondenza esatta es. Se si desidera corrispondenze parziali, è meglio utilizzare la funzionalità di ricerca di testo completo.
Grazie abbiamo deciso di implementarlo. – Luke101
Ciao G Mastros. Grazie per la tua risposta. Ho la colonna Varbinary che contiene molti dati. Questa colonna può essere nullo e ho una query che cerca i record in cui questa colonna non è nulla. Il tuo approccio al checksum sembra molto utile anche in questo caso. Ho controllato che il checksum per la colonna nullable sia 2147483647. Anche se può funzionare ma sembra strano codificare questo numero nelle query. Questo numero sarà lo stesso quando migreremo ad un'altra versione di SqlServer? Mi sono sparato al piede una volta utilizzando il metodo GetHashCode in C# e alla fine ha restituito un valore diverso a seconda del sistema operativo. – Mariusz
Non lo so per certo. Tuttavia, anziché codificare il numero, è possibile utilizzare "checksum" (Converti (varbinary, null)) ". Quindi, se il valore cambia con la versione db, sarai comunque protetto. –
SQL Server La ricerca di testo completo è ciò che probabilmente vorrai.
http://msdn.microsoft.com/en-us/library/ms142571.aspx
si deve passare attraverso alcuni cerchi minori con la sua creazione vs un indice semplice, ma non dovrebbe essere super hard.
- 1. SQL Server 2008 Ricerca di testo completo su una tabella con una chiave primaria composta
- 2. La chiave primaria SQL può accettare "0"?
- 3. Limite dimensioni indice 900 byte in lunghezza carattere
- 4. Gli indici server Sql includono la chiave primaria?
- 5. Una chiave primaria è automaticamente un indice?
- 6. La colonna Varchar (max) non può essere una chiave primaria in SQL Server
- 7. Come aumentare automaticamente la chiave non primaria? - SQL Server
- 8. È necessaria una chiave primaria in SQL Server?
- 9. SQL Server 2008: trovare la chiave primaria/esterna nella tabella?
- 10. database: chiave primaria, cluster o non cluster
- 11. Cambiare colonna di chiave primaria in SQL Server
- 12. Come eliminare la proprietà cluster ma mantenere la chiave primaria in una tabella. SQL Server 2005
- 13. deadlock di SQL Server 2005 con indice non cluster
- 14. In che modo SQL Server memorizza una chiave primaria composita?
- 15. Indice chiave univoco su SQL Server 2008
- 16. SQL Server incrementa automaticamente una colonna senza chiave primaria
- 17. Chiave primaria di SQL Server sul campo Data/ora
- 18. Una chiave esterna può agire come una chiave primaria?
- 19. SQL Server: arbitraria di incremento automatico della chiave primaria
- 20. Impossibile impostare la chiave primaria in SQL Server Management Studio
- 21. La tabella SQL può avere più colonne con chiave primaria?
- 22. Relazione tra chiave primaria e indice cluster
- 23. Informazioni su indice e chiave primaria in SQL?
- 24. Differenza di prestazioni di SQL Server con chiave primaria singola o multi colonna?
- 25. Perché non riesco a creare questo indice full text del server sql?
- 26. È necessario un indice per una chiave primaria in SQLite?
- 27. La chiave primaria è sempre in cluster?
- 28. GROUP BY chiave esterna o chiave primaria?
- 29. Chiave primaria in un database SQL di Azure
- 30. Come identificare la duplicazione della chiave primaria da un codice di errore di SQL Server 2008?
Questo non mi sembra molto efficiente. In realtà sembra un completo incubo per il motore DB da gestire. Hai stabilito che * hai * bisogno di cercare per URL e che questa ricerca sarà lenta? La ricerca del testo può essere abbastanza veloce, sai. C'è anche la possibilità di suddividere l'URL in bit, indicizzare solo uno di quei bit (quello che varia di più) e quindi collegare la parte indice all'intero URL. In breve, ci sono molte strategie possibili qui. – Robinson