Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/03/2007, 09h13   #1
Membre actif
 
Homme
Inscription : octobre 2006
Messages : 664
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : octobre 2006
Messages : 664
Points : 197
Points : 197
Par défaut Création d'un index sur un VARCHAR 2048 ?

Bonjour,

J'ai un champ dans une table qui est de type VARCHAR 2048.

Je l'utilise enormément pour effectuer des grosses requêtes, c'est pourquoi je souhaiterai l'indéxer.

Cependant, l'indexation d'un VARCHAR d'une taille de 2048 semble impossible.

Comment puis-je faire ?

Merci,
ZiP
[ZiP] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2007, 10h41   #2
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
tout dépend du jeu de caractère utilisé
avec FB2, un index sur un varchar(2048) avec character set None est possible

maintenant peut être qu'une autre solution est possible avec un autre champs, tout dépend de ce qui est stocké dans ce champ et si on peu en extraire quelque chose de significatif dans un autre champs plus petit
et aussi des recherches qui sont faites sur ce champ
j'imagine mal des recherches exactes dessus, si c'est des commence par, alors un index sur un autre champ maintenu par un trigger et qui ne comprendrai alors que les x premiers caractères peu aider
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2007, 12h10   #3
Membre actif
 
Homme
Inscription : octobre 2006
Messages : 664
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : octobre 2006
Messages : 664
Points : 197
Points : 197
Salut,

Voici la ligne de création de mon champ :
Code :
1
2
 
URL VARCHAR(2048) CHARACTER SET WIN1251 NOT NULL COLLATE WIN1251);
Je peux changer le CARACTER SET de quelle manière ?

Merci,
ZiP
[ZiP] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2007, 12h26   #4
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
Url Varchar(2048) Character Set None
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2007, 13h07   #5
Membre actif
 
Homme
Inscription : octobre 2006
Messages : 664
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : octobre 2006
Messages : 664
Points : 197
Points : 197
Bonjour,

Voici ma table :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
CREATE TABLE STATISTIQUES (
  ID INTEGER NOT NULL,
  UTILISATEUR VARCHAR(255) CHARACTER SET NONE NOT NULL COLLATE NONE,
  MACHINE VARCHAR(255) CHARACTER SET NONE NOT NULL COLLATE NONE,
  IP VARCHAR(15) CHARACTER SET NONE NOT NULL COLLATE NONE,
  HORAIRE DATE NOT NULL,
  URL VARCHAR(2048) CHARACTER SET NONE NOT NULL COLLATE NONE);
 
 
ALTER TABLE STATISTIQUES ADD PRIMARY KEY (ID);
 
 
SET TERM ^ ;
 
CREATE TRIGGER BI_STATISTIQUES_ID FOR STATISTIQUES
ACTIVE BEFORE INSERT
POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
      NEW.ID = GEN_ID(STATISTIQUES_ID_GEN, 1);
END^
 
SET TERM ; ^
Je ne peux toujours pas créer mon index sur mon champ URL de type VARCHAR(2048).

J'utilise la dernière version de Firebird disponible.

Merci pour votre aide,
ZiP
[ZiP] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2007, 13h10   #6
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
il faut lire un peu la doc livrée
252-byte index length limit is gone
A. Brinkman
New and reworked index code is very fast and tolerant of large numbers of duplicates. The old aggregate key
length limit of 252 bytes is removed. Now the limit depends on page size: the maximum size of the key in bytes
is 1/4 of the page size (512 on 2048, 1024 on 4096, etc.)
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2007, 13h29   #7
Membre actif
 
Homme
Inscription : octobre 2006
Messages : 664
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : octobre 2006
Messages : 664
Points : 197
Points : 197
Bonjour,

J'ai modifié mon page size à 8192.

Mais le problème persiste :



Merci pour votre aide,
ZiP
[ZiP] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2007, 13h50   #8
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
page size 16384 dans ton cas
mais franchement, je ne suis pas certains que ce soit une très bonne idée
mais si tu ne peux pas faire autrement...

quels types de requêtes tu vas faire sur ce champs ?
est ce vraiment obligatoire d'avoir une taille si importante ?
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2007, 13h56   #9
Membre actif
 
Homme
Inscription : octobre 2006
Messages : 664
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : octobre 2006
Messages : 664
Points : 197
Points : 197
Citation:
Envoyé par makowski
Now the limit depends on page size: the maximum size of the key in bytes is 1/4 of the page size (512 on 2048, 1024 on 4096, etc.)
En effet, ça fonctionne avec 16384. Mais je ne comprends pas pourquoi ça ne fonctionne pas avec 8192.

Je stock des adresses de pages Internet avec lesquelles je réalise des statistiques d'utilisations par le biais de requêtes de type : SELECT [...] WHERE [...] LIKE

Merci,
ZiP
[ZiP] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2007, 14h07   #10
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
Citation:
Envoyé par [ZiP]
En effet, ça fonctionne avec 16384. Mais je ne comprends pas pourquoi ça ne fonctionne pas avec 8192.

Je stock des adresses de pages Internet avec lesquelles je réalise des statistiques d'utilisations par le biais de requêtes de type : SELECT [...] WHERE [...] LIKE

Merci,
ZiP
parce que varchar 2048 -> 2048 +2 > 8192/4

ceci dit l'index ne sera utiliser que sur une recherche équivalente à STARTING WITH donc l'édée de faire un autre champ avec seulement les x premiers caractères est à explorer sérieusement
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2007, 14h15   #11
Membre actif
 
Homme
Inscription : octobre 2006
Messages : 664
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : octobre 2006
Messages : 664
Points : 197
Points : 197
OK!

Merci pour ce complément d'informations et votre aide.

ZiP
[ZiP] est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h16.


 
 
 
 
Partenaires

Hébergement Web