Bonjour ,

J'ai actuellement une base de données contenant une tabe qui a des millions de données.

Je dois lire toutes les entrées de la table pour rechercher un champs particulier et le champs sur lequel la recherche doit se faire c'est un binaire (donc celà se faire mieux a partir du langage que par la BD).

La structure de ma base données
ID : bigint
Image : varbinary(max)

Je possède une fonction c# qui permet de faire la correspondance entre une image et N ( < 100 000) images (birnaire de la BD).

Donc je dois lire les millions d'image dans ma base de données et passer a ma fonction pour la recherche.

A ce stade j'ai crée une fonction Table donc a structure est la suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
CREATEFUNCTION FN_PAGINATION
(	
	-- Add the parameters for the function here
	@Page int , 
    @Nombre int 
)
RETURNS TABLE 
AS
RETURN 
(
	WITH T AS (SELECT ID,
                          CAST(Image as varbinary(2048)) AS Image ,
 
                          ROW_NUMBER() OVER (ORDER BY IDDESC) AS sortOrder
                          FROM dbo.TP_Images)
        SELECT ID,Image
        FROM   T
        WHERE  sortOrder BETWEEN ((@page - 1) * @Nombre) + 1 
                         AND @page * @Nombre
 
)
GO
Donc le logiciel PC chez l'utilisateur se connecte a la BD et boucle en lisant les données page par page jusqu'a epuissement de la lecture des données ou l'algorithme trouve l'image correspondant.

Déjà je ne sais pas si l'architecture est bonne (client qui se connecte au serveur et récupéré les données pour faire le traitement ).
NB : plusieurs utilisateur sont connecte au même moment.

J'avoue que le temps de réponse est encore tres eleve mon objectif c'est de le reduire.

Avez vous des astuces ?