C'est un serveur physique,
Les blob ne sont pas long de deux milliards de caractère, je n'ai aucun moyen de connaitre la longueur des messages a l'avance.
Version imprimable
Ha bon ?
C'est un constat personnel dans des cas pratiques ?
Est-ce que tu aurais des liens vers des tests fais de façon intelligentes. j'ai pu lire ci et la quelque pseudo tests de comparaisons de perf, mais les conditions de tests étaient parfois... douteuses et les résultats aussi d'ailleurs :D
En fait la question de fond est : est-ce a appliquer à la lettre et donc oublier définitivement le type INT quand on développe pour du 64 bit, ou est-ce que ça n'est pas quand même relatif (rien que l'espace supplémentaire que cela peut engendrer dans le cache ne peut pas dans la pratique avoir un impact plus négatif que le gain au niveau des calculs ? )
On dirait bien que SQL Server 2011 pourrait enfin apporter une solution a la pagination :
http://sqlserverplanet.com/sql-serve...sing-order-by/ :)
Si non je pensais a un truc, faire seulement la requête sur la table messages, puis ensuite, faire la jointure seulement sur ce qu'a retourné la première requête, tout ça dans une procédure éventuellement, c'est une bonne idée ?
tests personnels réalisé dans le cadre du cours sur l'optiisation de SQL Server que j'ai élaboré pour Orsys.
SQL 2000 : 10 % de perte
SQL 2005 : environ 1 %
Sur des requêtes complexes avec beaucoup de jointures, une volumétrie importante et des calculs d'agrégats sur les clefs (max, min, sum).
A +
Par contre tu sais comment je pourrais faire cette requete ? J'essais de faire quelque chose comme ça, mais ca ne fonctionne pas :
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 SELECT * FROM ( SELECT TOP 100 MessageId, MessageUuid, MessageData, MessagePostDate FROM ( SELECT dbo.Messages.Id AS MessageId, dbo.Messages.Uuid AS MessageUuid, dbo.Messages.Data AS MessageData, dbo.Messages.PostDate AS MessagePostDate, dbo.Messages.ChannelId AS ChannelId, dbo.Messages.UserId AS UserId, ROW_NUMBER() OVER (ORDER BY dbo.Messages.Id DESC) AS RowNumber FROM dbo.Messages ) AS MessagesData WHERE RowNumber > 120000 ) AS MessagesData, ( SELECT Channels.Name AS ChannelName, Channels.Id AS ChannelId FROM Channels ) AS ChannelsData, ( SELECT Users.Name AS UserName, Users.Id AS UserId FROM Users ) AS UsersData INNER JOIN dbo.Users ON MessagesData.UserId = UsersData.UserId INNER JOIN dbo.Channels ON MessagesData.ChannelId = ChannelsData.ChannelId
Code:
1
2
3
4
5
6 Msg 4104, Level 16, State 1, Line 23 The multi-part identifier "MessagesData.UserId" could not be bound. Msg 4104, Level 16, State 1, Line 24 The multi-part identifier "MessagesData.ChannelId" could not be bound. Msg 4104, Level 16, State 1, Line 24 The multi-part identifier "ChannelsData.ChannelId" could not be bound.
Bonjour,
Je n'ai pas lu en détail ta requête, mais concernant tes messages d'erreurs, ils sont dûs au fait que tu ne sélectionne pas ces trois colonnes dans ta requete pour la pseudo table MessagesData.
Pour le troisième message d'erreur, tu fais une jointure avec la table Channels, mais ta condition de jointure ne porte sur aucune colonne de ta table Channels :?:, je pense que tu voulais écrire Channels.Id
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
26
27
28
29
30
31
32 SELECT * FROM ( SELECT TOP 100 MessageId, MessageUuid, MessageData, UserId, ChannelId , MessagePostDate FROM ( SELECT dbo.Messages.Id AS MessageId, dbo.Messages.Uuid AS MessageUuid, dbo.Messages.DATA AS MessageData, dbo.Messages.PostDate AS MessagePostDate, dbo.Messages.ChannelId AS ChannelId, dbo.Messages.UserId AS UserId, ROW_NUMBER() OVER (ORDER BY dbo.Messages.Id DESC) AS RowNumber FROM dbo.Messages ) AS MessagesData WHERE RowNumber > 120000 ) AS MessagesData, ( SELECT Channels.Name AS ChannelName, Channels.Id AS ChannelId FROM Channels ) AS ChannelsData, ( SELECT Users.Name AS UserName, Users.Id AS UserId FROM Users ) AS UsersData INNER JOIN dbo.Users ON MessagesData.UserId = UsersData.UserId INNER JOIN dbo.Channels ON MessagesData.ChannelId = Channels.Id
Hmm par contre il ne trouve pas Messages (dans mon code) ou MessagesData (dans ton code), c'est normal ?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 SELECT * FROM ( SELECT TOP 100 MessageId, MessageUuid, MessageData, MessagePostDate FROM ( SELECT dbo.Messages.Id AS MessageId, dbo.Messages.Uuid AS MessageUuid, dbo.Messages.Data AS MessageData, dbo.Messages.PostDate AS MessagePostDate, dbo.Messages.ChannelId AS ChannelId, dbo.Messages.UserId AS UserId, ROW_NUMBER() OVER (ORDER BY dbo.Messages.Id DESC) AS RowNumber FROM dbo.Messages ) AS MessagesData WHERE RowNumber > 120000 ) AS MessagesData, ( SELECT Channels.Name AS ChannelName, Channels.Id AS ChannelId FROM Channels ) AS ChannelsData, ( SELECT Users.Name AS UserName, Users.Id AS UserId FROM Users ) AS UsersData INNER JOIN dbo.Channels ON Messages.ChannelId = Channels.Id INNER JOIN dbo.Users ON Messages.UserId = Users.Id