
{"id":350,"date":"2008-12-19T11:52:08","date_gmt":"2008-12-19T10:52:08","guid":{"rendered":"http:\/\/dasini.net\/blog\/?p=350"},"modified":"2009-01-08T22:20:15","modified_gmt":"2009-01-08T21:20:15","slug":"mysql-5-les-vues-part-57","status":"publish","type":"post","link":"https:\/\/dasini.net\/blog\/2008\/12\/19\/mysql-5-les-vues-part-57\/","title":{"rendered":"MySQL 5 : Les vues &#8212; (part 5\/7)"},"content":{"rendered":"<p><!-- \t \t --><\/p>\n<address>(<a title=\"MySQL 5 : Les vues -- (part 4\/7)\" href=\"http:\/\/dasini.net\/blog\/2008\/12\/08\/mysql-5-les-vues-part-47\/\">&lt;- pr\u00e9c\u00e9dent<\/a>)<\/address>\n<p><!-- \t \t --><\/p>\n<h3>Masquer la complexit\u00e9 du sch\u00e9ma<\/h3>\n<p>L&rsquo;\u00e9quipe de d\u00e9veloppement doit \u00e9crire un moteur de recherche pour une application de commerce \u00e9lectronique. Voici un extrait des tables de la base de donn\u00e9es impliqu\u00e9es dans la recherche des produits du site.<\/p>\n<p>La difficult\u00e9 est de g\u00e9n\u00e9rer la bonne requ\u00eate avec les bonnes jointures (plus d&rsquo;une dizaine), \u00e0 chaque recherche. Une solution pour faciliter le travail des d\u00e9veloppeurs est de cr\u00e9er une vue qui fait r\u00e9f\u00e9rence \u00e0 toutes les tables impliqu\u00e9es dans la recherche des produits. Les recherches se feront donc sur cette vue, avec des requ\u00eates plus simples \u00e0 \u00e9crire.<\/p>\n<p>La vue est cr\u00e9\u00e9e avec l&rsquo;algorithme TEMPTABLE, les verrous sur les tables sous-jacentes seront lib\u00e9r\u00e9s plus rapidement ce qui permettra de moins p\u00e9naliser les autres requ\u00eates. TEMPTABLE a la particularit\u00e9 de rendre la vue non modifiable, mais cela ne g\u00eane pas du tout, car la vue n&rsquo;est acc\u00e9d\u00e9e qu&rsquo;en lecture.<\/p>\n<p>Extrait de la vue \u00ab\u00a0moteur de recherche\u00a0\u00bb:<\/p>\n<pre>CREATE ALGORITHM = TEMPTABLE\r\nVIEW moteur_de_recherche\r\nAS\r\nSELECT\r\n   s.product_name as nom_produit,\r\n   ... (les champs n\u00e9cessaires)\r\nFROM product s\r\n LEFT JOIN product_files sf ON s.product_id=sf.file_product_id\r\n LEFT JOIN ..... (toutes les tables impliqu\u00e9es)\r\n<em>WHERE ... ;<\/em><\/pre>\n<p>Cette astuce permet de \u00ab\u00a0simplifier\u00a0\u00bb de fa\u00e7on assez significative le sch\u00e9ma.<\/p>\n<p>Un dernier mot pour noter que cette solution ne permet pas d&rsquo;am\u00e9liorer les performances de la recherche, dans le sens o\u00f9 la requ\u00eate qui g\u00e9n\u00e8re la vue est lanc\u00e9e \u00e0 chaque appel de cette derni\u00e8re.<\/p>\n<p><!-- \t \t --><br \/>\n<a title=\"MySQL 5 : Les vues -- (part 6\/7)\" href=\"http:\/\/dasini.net\/blog\/2009\/01\/07\/mysql-5-les-vues-part-67\/\"><em>(\u00e0 suivre\u2026 Modifier automatiquement des donn\u00e9es s\u00e9lectionn\u00e9es)<\/em><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Masquer la complexit\u00e9 du sch\u00e9ma<\/p>\n<p>L&rsquo;\u00e9quipe de d\u00e9veloppement doit \u00e9crire un moteur de recherche pour une application de commerce \u00e9lectronique. Voici un extrait des tables de la base de donn\u00e9es impliqu\u00e9es dans la recherche des produits du site.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"footnotes":""},"categories":[8],"tags":[241,12,58],"class_list":["post-350","post","type-post","status-publish","format-standard","hentry","category-mysql","tag-mysql","tag-mysql-5","tag-vue"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9LfWW-5E","jetpack-related-posts":[{"id":403,"url":"https:\/\/dasini.net\/blog\/2009\/01\/13\/mysql-5-les-vues-part-77\/","url_meta":{"origin":350,"position":0},"title":"MySQL 5 : Les vues &#8212; (part 7\/7)","author":"Olivier DASINI","date":"13 janvier 2009","format":false,"excerpt":"Conserver la structure d'une table si elle doit \u00eatre modifi\u00e9e La probl\u00e9matique est de mettre \u00e0 jour le sch\u00e9ma de l'application en changeant la structure de certaines tables.","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":192,"url":"https:\/\/dasini.net\/blog\/2008\/11\/23\/mysql-5-les-vues-part-17\/","url_meta":{"origin":350,"position":1},"title":"MySQL 5 : Les vues &#8212; (part 1\/7)","author":"Olivier DASINI","date":"23 novembre 2008","format":false,"excerpt":"Le langage SQL acronyme de Structured Query Language (Langage Structur\u00e9 de Requ\u00eates), a \u00e9t\u00e9 con\u00e7u pour g\u00e9rer les donn\u00e9es dans un SGBDR. A l'aide des DML (Data Manipulation Language ie les requ\u00eates SELECT, INSERT, UPDATE, DELETE) il est possible de manipuler ces donn\u00e9es qui sont stock\u00e9es dans des tables. SQL\u2026","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":248,"url":"https:\/\/dasini.net\/blog\/2008\/11\/30\/mysql-5-les-vues-part-37\/","url_meta":{"origin":350,"position":2},"title":"MySQL 5 : Les vues &#8212; (part 3\/7)","author":"Olivier DASINI","date":"30 novembre 2008","format":false,"excerpt":"Restrictions Lors de la cr\u00e9ation d'une vue, certaines contraintes doivent \u00eatre prises en compte : * Il n'est pas possible de cr\u00e9er un index sur une vue * La vue ne peut pas contenir de sous-requ\u00eates dans la clause FROM du SELECT. * Il n'est pas possible d'utiliser de variables\u2026","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":209,"url":"https:\/\/dasini.net\/blog\/2008\/11\/26\/mysql-5-les-vues-part-27\/","url_meta":{"origin":350,"position":3},"title":"MySQL 5 : Les vues &#8212; (part 2\/7)","author":"Olivier DASINI","date":"26 novembre 2008","format":false,"excerpt":"Syntaxe d'une vue CREATE VIEW La commande MySQL pour cr\u00e9er une vue est assez proche de la syntaxe du standard SQL. CREATE VIEW nom_de_la_vue AS requ\u00eate_select","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":788,"url":"https:\/\/dasini.net\/blog\/2009\/10\/12\/mysql-query-cache\/","url_meta":{"origin":350,"position":4},"title":"MySQL Query cache","author":"Olivier DASINI","date":"12 octobre 2009","format":false,"excerpt":"Le cache est toujours \u00e0 jour car en cas de modification d'une table, toutes les requ\u00eates en relations avec cette table sont invalid\u00e9es. Le cache de requ\u00eates est en g\u00e9n\u00e9ral utile lorsque: Les modifications sur les tables ne sont pas tr\u00e8s fr\u00e9quentes Beaucoup de requ\u00eates de lectures identiques Utilisation de\u2026","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":14,"url":"https:\/\/dasini.net\/blog\/2008\/10\/28\/mysql-50-un-sgbdr-mature-part-24\/","url_meta":{"origin":350,"position":5},"title":"MySQL 5.0 : Un SGBDR mature ? &#8212; (part 2\/4)","author":"Olivier DASINI","date":"28 octobre 2008","format":false,"excerpt":"Les vues sont la plupart du temps utiles pour donner aux utilisateurs l\u2019acc\u00e8s \u00e0 un ensemble de relations repr\u00e9sent\u00e9es sous la forme d'une table. Une vue est une table virtuelle ; les donn\u00e9es de la vue sont en fait des champs de diff\u00e9rentes tables regroup\u00e9es, ou des r\u00e9sultats d\u2019op\u00e9rations sur\u2026","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/350","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/comments?post=350"}],"version-history":[{"count":9,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/350\/revisions"}],"predecessor-version":[{"id":382,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/350\/revisions\/382"}],"wp:attachment":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/media?parent=350"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/categories?post=350"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/tags?post=350"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}