Preso dall'entusiasmo della nuova stagione ho iniziato a migrare me stesso verso i nuovi VS e SQL (2005, arrivo sempre dopo la puzza). Mentre sono entusiasto di VS che ha rispettato tutte le mie aspettative e forse anche di più (per ora non ho trovato rivoluzioni*) mi accingo a testare il nuovo tipo XML di SQLServer 2005, nella mia mente sono infuocatissimo perchè ora potrei (ma non dovrei) mettere tutti gli attributi in un unico campo XML, indicizzarlo e fare Query a manetta con XPath, che spettacolo, allora creo una tabella con un qualche attributo e il fantastico campo XML dove gli metto un grande indice.

SELECT COUNT(*) FROM dbo.TestXml WHERE TestXml2.value('declare namespace PD="http://tempuri.org/Test.xsd"; /PD:Test[1]/PD:TableTest[1]/PD:Cognome[1]', 'VARCHAR(50)') = 'VALENTI'

In una tabella con appena 200000 record e un XML del tipo


<Test xmlns="http://tempuri.org/Test.xsd">
 <TableTest>
  <Cognome>VALENTI</Cognome>
  <Nome>ALESSANDRO</Nome>
  <CognomeNome>VALENTI ALESSANDRO</CognomeNome>
  <DataNascita>19771006</DataNascita>
  <Attr1>0,389548152866563</Attr1>
  <Attr2>0,940962524125801</Attr2>
  <Attr3>0,616221261032029</Attr3>
 </TableTest>
</Test>

Per trovarmi 1500 recod che rispondono alla query ci impiega circa 4 minuti su una macchina virtuale; la mia impressione è che faccia qualcosa di peggio di un table scan nonostante il piano di esecuzione faccia vedere cose strane tipo Join su indici cluster... Mah...

Ora nel mio piano certificativo c'è come prossimo obiettivo SQL2005 (devo ancora iniziare a studiare); ma se nel mentre qualcuno conosce un modo intelligente per utilizzare le stringhe XPATH come parametro della WHERE (.value, .query) allora sarebbe bello se qualcuno mi rispondesse e magari scrivesse un articolo su questo argomento; invece ritengo performante utilizzare queste funzionalità nei parametri della SELECT.

* Per fortuna --> MSVS2005 non ci sono rivoluzioni ma solamente aggiunte :)

Un saluto a tutti
Allino