View Issue Details

IDProjectCategoryView StatusLast Update
0002316Blog[All Projects] Generalpublic2017-10-29 14:27
ReporterXenosAssigned ToXenos 
PrioritynormalSeverityfeatureReproducibilityN/A
Status CloseResolutionfixed 
Product Version 
Target VersionFixed in Version 
Summary0002316: MySQL language tricks
DescriptionDO, HANDLER,

Ca, c'est fait:
REPLACE etc de https://dev.mysql.com/doc/refman/5.7/en/replace.html peuvent être utile: autant voir à quoi cela sert, en faire un paragraphe dans l'article sur les astuces MySQL, et voilà.

https://dev.mysql.com/doc/refman/5.7/en/any-in-some-subqueries.html ANY SOME IN ALL etc

https://dev.mysql.com/doc/refman/5.7/en/row-subqueries.html WHERE (x,y) = (SELECT x,y FROM ...)
TagsNo tags attached.
Attach Tags

Activities

Xenos

Xenos

2017-08-25 17:29

administrator   ~0003558

Last edited: 2017-10-26 18:31

View 4 revisions

Et voir tout le reste de https://dev.mysql.com/doc/refman/5.7/en/mysql-nutshell.html décrit ci-dessous

dont:
https://dev.mysql.com/doc/refman/5.7/en/create-tablespace.html
https://dev.mysql.com/doc/refman/5.7/en/get-diagnostics.html
https://dev.mysql.com/doc/refman/5.7/en/triggers.html
https://dev.mysql.com/doc/refman/5.7/en/explain.html
https://dev.mysql.com/doc/refman/5.7/en/json-creation-functions.html#function_json-array
RENAME INDEX https://dev.mysql.com/doc/refman/5.7/en/alter-table.html et ALGORITHM=INPLACE
NGRAM/MECAB https://dev.mysql.com/doc/refman/5.7/en/fulltext-search-mecab.html https://dev.mysql.com/doc/refman/5.7/en/fulltext-search-ngram.html
 InnoDB supports indexing of spatial data types using SPATIAL indexes, including use of ALTER TABLE ... ALGORITHM=INPLACE for online operations (ADD SPATIAL INDEX).
MySQL now supports the specification of generated columns
Multiple triggers on same table

Xenos

Xenos

2017-08-28 11:13

administrator   ~0003561

Last edited: 2017-10-26 18:31

View 2 revisions

• 13.2.9 SELECT Syntax (pour les flags)
• 13.2.5 INSERT Syntax (pour le "SET") https://dev.mysql.com/doc/refman/5.7/en/insert.html
https://dev.mysql.com/doc/refman/5.7/en/savepoint.html
https://dev.mysql.com/doc/refman/5.7/en/set-transaction.html
https://dev.mysql.com/doc/refman/5.7/en/xa.html
https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html
https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-compound-statements.html
https://dev.mysql.com/doc/refman/5.7/en/explain.html
https://dev.mysql.com/doc/refman/5.7/en/stored-programs-views.html
https://dev.mysql.com/doc/refman/5.7/en/functions.html
https://dev.mysql.com/doc/refman/5.7/en/data-types.html
https://dev.mysql.com/doc/refman/5.7/en/optimization.html

Xenostom

Xenostom

2017-09-11 15:30

developer   ~0003570

Last edited: 2017-10-27 11:41

View 3 revisions

MySQL 8 https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html mais là, il faut attendre sa release officielle, je vais juste laisser le lien pour info: tour fait

https://dev.mysql.com/doc/refman/8.0/en/innodb-locking-reads.html#innodb-locking-reads-nowait-skip-locked
JSON enhancements.
https://dev.mysql.com/doc/refman/8.0/en/with.html (common table expression! des graphs et des arbres!)

Xenostom

Xenostom

2017-09-11 15:59

developer   ~0003571

Un article sur l'optimisation?
https://dev.mysql.com/doc/refman/5.7/en/optimization.html

• Le nombre de colonnes et de tables en jeu dans les requêtes, ainsi que leur structure (type de colonnes) et leurs indexes, le row_format
• Est-ce que les LOCK sont bien posés? Parce que locker tout tout le temps, ça rame
• Bannir les fonctions dans les WHERE, y compris celles DETERMINIST. L'idéal, c'est de faire un remplacement in-line de la fonction avant d'exécuter la requête (si possible). Si non possible, mieux vaut parfois revoir sa structure de requêtes, et passer éventuellement par de la procédure ou assimilé (ou les colonnes virtuelles). En revanche, inutile de vouloir bricoler l'ordre des conditions car MySQL s'en charge (mieux vaut just faire lisible)
• HAVING est directement mergé à WHERE s'il n'y a pas de GROUP BY
• "For each table in a join, a simpler WHERE is constructed to get a fast WHERE evaluation for the table and also to skip rows as soon as possible. "
• Les constant TABLE sont parfaitement bien gérées (donc on peut faire une table de constantes de jeu, et faire un sous-SELECT dessus, c'est véloce car MySQL fait l'extraction en premier, et considère la ligne de donnée comme une cte)
• MySQL réordonne les jointures si nécessaire, donc on se concentre sur la lisibilité
• Un FULL TABLE SCAN peut être fait si MySQL considère que c'est plus rapide (cf les hints si on sait le contraire)
• L'index doit être HASH ou BTREE suivant si les WHERE sont des égalités/IN ou des comparaisons
• MySQL collapse les conditions si besoin (ie: "WHERE (x LIKE '...' OR TRUE)" sera considéré comme toujours vrai et le WHERE saute)
• Nested loop join est très mauvais (il itère toutes les combinaisons de rows d'un join) et block nested est un peu meilleur (c'est un nested avec un cache MySQL, par "block")
• Toute expression dans un ORDER BY, y compris un "ORDER BY -x" semble empêcher MySQL d'utiliser les indexes
• GROUP BY devrait porter sur un et un seul index (qui peut avoir plusieurs colonnes) de type BTREE (triable) ce qui peut permettre de faire des MIN/MAX/SUM rapidement
• LIMIT améliore les perfs, sauf si un SQL_FOUND_ROWS est présent (logique), et LIMIT 0 permet de retourner rapidement un resultset vide, pour checker qu'une query est valide
• SELECT * FROM t1 WHERE (column1,column2) = (1,1); peut être bien si on a posé l'index sur toutes les colonnes du "row constructor" (c1, c2) mais bloque MySQL dans le cas contraire (donc, un c1 = 1 AND c2 = 2 est souvent plus sûr, mais parfois moins lisible)
• Si EXPLAIN retourne ALL alors cela implique qu'un FULL TABLE SCAN est fait (ce qu'il faut éviter), sauf dans certains cas (table a peu de lignes par exemple) ANALYZE TABLE et FORCE INDEX peuvent alors servir
• Dans les cas tricky et si on est bon (ie: le plus souvent, il ne faut pas le faire) alors l'optimizer peut s'ajuster pour une query spécifique https://dev.mysql.com/doc/refman/5.7/en/optimizer-hints.html
• La fonction BENCHMARK peut aider à savoir si une query traine des pieds ou pas


--> Les LEFT JOIN (et autres JOIN) peuvent être faits sur des tables + sous-jointures?! genre "t1 LEFT JOIN (t2 LEFT JOIN t3) ON ..."?!
--> ou SELECT * FROM t1 LEFT JOIN (t2, t3) ON t1.a=t2.a
https://dev.mysql.com/doc/refman/5.7/en/nested-join-optimization.html
Xenostom

Xenostom

2017-09-12 15:17

developer   ~0003572

https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html A lier à l'optimisation, pour que les gens aillent chercher le bon typage de data
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-type-overview.html Idem, mais pour en plus présenter que DateTime sert plutôt à enregistrer une date et timestamp un point dans le temps
https://dev.mysql.com/doc/refman/5.7/en/out-of-range-and-overflow.html Pour éviter certaines triches
https://dev.mysql.com/doc/refman/5.7/en/gis-data-formats.html#gis-wkt-format Pour les géométries des maps des jeux
https://dev.mysql.com/doc/refman/5.7/en/json.html
https://dev.mysql.com/doc/refman/5.7/en/func-op-summary-ref.html Fonctions
https://dev.mysql.com/doc/refman/5.7/en/non-typed-operators.html Pour le <=> (IS NOT DISTINCT FROM) operator
https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html
https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html NULLIF
https://dev.mysql.com/doc/refman/5.7/en/string-functions.html Fonctons
https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html#function_strcmp STRCMP
https://dev.mysql.com/doc/refman/5.7/en/numeric-functions.html
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html
https://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html Peu utiles pour les jeux, mais bon
https://dev.mysql.com/doc/refman/5.7/en/xml-functions.html Mais JSON sera plus simple
https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html Peut-être plus utile, mais attention à ne pas pousser les dev à refaire de travers le password_verify/hash de PHP
https://dev.mysql.com/doc/refman/5.7/en/information-functions.html Pour la func BENCHMARK
Xenostom

Xenostom

2017-09-12 15:27

developer   ~0003573

https://dev.mysql.com/doc/refman/5.7/en/spatial-function-reference.html Très utiles pour les maps des jeux
https://dev.mysql.com/doc/refman/5.7/en/json-function-reference.html Pour travailler avec du JSON (attention à bien l'utiliser: ça ne sert pas à stocker vite fait des trucs parce qu'on a la flemme de faire des colonnes)
https://dev.mysql.com/doc/refman/5.7/en/gtid-functions.html ?!
https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html
https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html
Xenostom

Xenostom

2017-09-12 15:34

developer   ~0003574

Faut faire chaque ligne
https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-data-definition.html
https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-data-manipulation.html
https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-transactions.html
https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-replication.html
https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html
https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-compound-statements.html
https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-server-administration.html
https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-utility.html

A voir
https://dev.mysql.com/doc/refman/5.7/en/innodb-storage-engine.html
https://dev.mysql.com/doc/refman/5.7/en/document-store.html
https://dev.mysql.com/doc/refman/5.7/en/partitioning.html
https://dev.mysql.com/doc/refman/5.7/en/stored-programs-views.html
Xenos

Xenos

2017-10-29 14:27

administrator   ~0003609

https://toile.reinom.com/tag/mysql/

Issue History

Date Modified Username Field Change
2017-08-24 17:02 Xenos New Issue
2017-08-25 17:29 Xenos Note Added: 0003558
2017-08-28 11:13 Xenos Note Added: 0003561
2017-09-11 15:30 Xenostom Note Added: 0003570
2017-09-11 15:59 Xenostom Note Added: 0003571
2017-09-12 15:17 Xenostom Note Added: 0003572
2017-09-12 15:27 Xenostom Note Added: 0003573
2017-09-12 15:34 Xenostom Note Added: 0003574
2017-10-26 17:38 Xenos Assigned To => Xenos
2017-10-26 17:38 Xenos Status New => In progress
2017-10-26 18:23 Xenos Description Updated View Revisions
2017-10-26 18:28 Xenos Note Edited: 0003558 View Revisions
2017-10-26 18:29 Xenos Note Edited: 0003558 View Revisions
2017-10-26 18:31 Xenos Note Edited: 0003561 View Revisions
2017-10-26 18:31 Xenos Note Edited: 0003558 View Revisions
2017-10-26 18:31 Xenos Note Edited: 0003570 View Revisions
2017-10-27 11:41 Xenos Note Edited: 0003570 View Revisions
2017-10-29 14:27 Xenos Status In progress => Close
2017-10-29 14:27 Xenos Resolution open => fixed
2017-10-29 14:27 Xenos Note Added: 0003609