当前位置:网站首页>MySQL information Schema Learning (i) - - General table
MySQL information Schema Learning (i) - - General table
2022-07-06 19:27:00 【Dark Night Hunter - Big Magic】
Parfois, il y a des besoins,Par exemple, pour voir les champs d'une condition particulière dans une base de données statistique,Il y avait un tableau stupide pour analyser les statistiques,En fait...information schemaOffre une fonctionnalité très puissante,Peut être étudié.
Références,Documents du site officiel:
MySQL :: MySQL 5.7 Reference Manual :: 24 INFORMATION_SCHEMA Tableshttps://dev.mysql.com/doc/refman/5.7/en/information-schema.htmlinformation schemaQu'y a - t - il dedans?,Lisez la description du document:
INFORMATION_SCHEMAFournir une paire de bases de données Métadonnées、Concernant MySQL Informations sur le serveur( Par exemple, le nom de la base de données ou de la table 、 Type de données ou accès à la colonne )Visites.information La table à l'intérieur est la vue , Aucun fichier de données :INFORMATION_SCHEMAC'est chacun. MySQL Une base de données dans l'Instance , Cet emplacement stocke des informations sur MySQL Informations sur toutes les autres bases de données tenues à jour par le serveur .Le INFORMATION_SCHEMA La base de données contient plusieurs tableaux en lecture seule .Ce sont en fait des vues, Au lieu de la table de base , Il n'y a donc pas de fichiers associés à eux , Et les déclencheurs ne peuvent pas être réglés sur eux .En outre, Il n'y a pas de répertoire de base de données avec ce nom .
En grosschemaQuels sont les tableaux ci - dessous:

Il s'agit principalement des permissions de métadonnées de la base de données , Variables et une grande partie INNODB Tables liées au moteur de stockage .
Apprenez principalement les tableaux couramment utilisés
1. TABLES
| TABLES | Informations sur le tableau |

tables Le tableau décrit principalement les métadonnées d'une table de base de données , Vous pouvez obtenir des informations sur le tableau , Nombre de lignes, par exemple ,Espace occupé, etc..
Les principaux champs sont les suivants:
TABLE_CATALOGNom du répertoire auquel appartient le tableau . La valeur est toujoursdef.TABLE_SCHEMASchéma auquel appartient le tableau (Base de données)Nom de.TABLE_NAMENom du tableau.TABLE_TYPEBASE TABLE/SYSTEM VIEWENGINEMoteur de stockage des tables.Pour les tables partitionnées,ENGINEAffiche le nom du moteur de stockage utilisé par toutes les partitions .VERSION.frmTable file Numéro de version.ROW_FORMATFormat de stockage de ligne (Fixed,Dynamic,Compressed,Redundant,Compact).TABLE_ROWSNombre de lignes.Certains moteurs de stockage,Par exempleMyISAM, Stocker le nombre exact .Pour les autres moteurs de stockage,Par exempleInnoDB, Cette valeur est approximative ,Peut différer de la valeur réelle 40% À 50%.Dans ce cas,,Veuillez utiliserSELECT COUNT(*)Pour obtenir un compte exact .AVG_ROW_LENGTHPrésident moyen .DATA_LENGTHPourMyISAM,DATA_LENGTHEst la longueur du fichier de données ,En octets.Pour
InnoDB,DATA_LENGTHEst la quantité approximative d'espace allouée à l'index groupé ,En octets.Plus précisément,, C'est la taille de l'index groupé (En pages)Multiplié parInnoDBTaille de la page.Informations sur les autres moteurs de stockage , Voir les notes à la fin de cette section .
MAX_DATA_LENGTHPourMyISAM,MAX_DATA_LENGTHEst la longueur maximale du fichier de données . Taille donnée du pointeur de données utilisé , C'est le nombre total d'octets de données qui peuvent être stockés dans le tableau .INDEX_LENGTHPourMyISAM,INDEX_LENGTHEst la longueur du fichier index ,En octets.Pour
InnoDB,INDEX_LENGTHEst la quantité approximative d'espace allouée à l'index non groupé ,En octets.Plus précisément,, C'est la somme de la taille de l'index non groupé (En pages)Multiplié parInnoDBTaille de la pageAUTO_INCREMENTSuivant.AUTO_INCREMENTValeurCREATE_TIMETemps de création de la tableTABLE_COMMENTCommentaires utilisés lors de la création du tableau
Selondata_length+index_length Vous pouvez compter approximativement la taille de l'espace occupé par la table .
Par exemple, comptez la taille de l'espace de toutes les tables
SELECT TABLE_NAME, sum(DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024 / 1024 as size FROM information_schema.`TABLES` GROUP BY TABLE_NAME ORDER BY size desc;2.COLUMNS
| COLUMNS | Colonnes dans chaque tableau |
Fournir des renseignements sur les colonnes du tableau . Avec les colonnes suivantes :
TABLE_CATALOGNom du répertoire auquel appartient le tableau contenant cette colonne . La valeur est toujoursdef.TABLE_SCHEMASchéma auquel appartient le tableau contenant cette colonne (Base de données)Nom de.TABLE_NAMENom du tableau contenant la colonne .COLUMN_NAMENom de la colonne.ORDINAL_POSITIONPosition indiquée dans le tableau .COLUMN_DEFAULTValeurs par défaut pour les colonnes.C'estNULLSi la colonne a une valeur par défaut expliciteNULL, Ou la définition de colonne ne contient pasDEFAULTClause.IS_NULLABLEColonne vide .La valeur estYESEst - ce queNULLVous pouvez stocker les valeurs dans les colonnes ,NOSi ce n'est pas le cas,.DATA_TYPEType de données de colonne.CHARACTER_MAXIMUM_LENGTHPour les colonnes de chaînes de caractères , Longueur maximale en caractères .CHARACTER_OCTET_LENGTHPour les colonnes de chaînes de caractères ,Longueur maximale(En octets).NUMERIC_PRECISIONPour les colonnes numériques,Précision numérique.NUMERIC_SCALEPour les colonnes numériques , Échelle numérique .DATETIME_PRECISIONPour la colonne temps , Précision décimale - seconde .CHARACTER_SET_NAMEPour les colonnes de chaînes de caractères ,Nom du jeu de caractères.COLLATION_NAMEPour les colonnes de chaînes de caractères , Nom de la collation .COLUMN_TYPECOLUMN_TYPELa valeur contient le nom du type et éventuellement d'autres informations , Par exemple, précision ou longueur .COLUMN_KEYColonne indexée :Si
COLUMN_KEYVide, La colonne n'est pas indexée , Ou seulement en colonnes multiples 、 La colonne auxiliaire de l'index non unique est indexée .Si
COLUMN_KEY- Oui.PRI,La colonne estPRIMARY KEYOu Est l'une des nombreuses colonnesPRIMARY KEY.Si
COLUMN_KEY- Oui.UNI,La colonne estUNIQUEPremière colonne de l'index.(UNIQUEPlusieurs index sont autorisésNULLValeur, Mais vous pouvezNULLPar inspectionNullColonne pour déterminer si la colonne permet .)Si
COLUMN_KEY- Oui.MUL,Cette colonne est la première colonne d'un index non unique, Où la valeur donnée peut apparaître plus d'une fois dans la colonne .
PRIVILEGESVos permissions sur cette colonne .COLUMN_COMMENTTout commentaire contenu dans la définition de colonne .
Adoptioncolumns Les tableaux peuvent être produits en vrac DDLDéclarations, etc.. Par exemple, la longueur du champ de chaîne pour toutes les tables sous la base de données 40Extension à60 Vous pouvez interrogercolumn_type=varchar(40) Quelles colonnes y a - t - il? , Puis il est généré par lots ddl sql.
3.PARTITIONS
| PARTITIONS | Informations sur la partition de la table |
Données stockées sur une table partitionnée ,Champ principal:
PARTITION_NAMENom de la partition.PARTITION_METHODValeurRANGE,LIST,HASH,LINEAR HASH,KEY, OuLINEAR KEY;TABLE_ROWSNombre de lignes de tableau dans la partition . Vous pouvez compter approximativement le nombre de lignes d'une table partitionnée
4.PROCESSLIST
| PROCESSLIST | Informations sur le thread d'exécution actuel |
show processlist; Vous pouvez voir les connexions actives à la base de données actuelle ,Thread, etc., Souvent utilisé pour voir l'état actuel de fonctionnement de la base de données .
MySQL La liste des processus indique les actions actuellement effectuées par les ensembles de Threads qui sont exécutés dans le serveur .
Colonne centrale :
IDIdentifiant de connexion. Peut être utiliséKILL Instruction Kill thread .USERDe la Déclaration MySQL Utilisateurs.HOSTNom d'hôte du client qui a émis l'instructionDBBase de données par défaut pour les Threads,OuNULLSi vous n'avez pas le choix.COMMANDLe thread représente le type de commande exécutée par le client ,OuSleepLa session est - elle libre? .TIMETemps pendant lequel le thread est dans l'état actuel (En secondes).STATEAction indiquant ce que fait le thread 、 Événement ou état . La plupart des états correspondent à des opérations très rapides . Si un thread reste dans un état donné pendant quelques secondes , Il peut y avoir des problèmes qui nécessitent une enquête .INFOL'instruction que le thread exécute,OuNULLS'il n'exécute aucune instruction . Si l'instruction exécute une autre instruction , Il peut s'agir d'une instruction envoyée au serveur , Ou les déclarations les plus intimes .Par exemple,SiCALLExécution de l'instruction en cours SELECTProcédures stockées pour les déclarations,Alors...INFOLa valeur affiche ceci SELECTDéclarations.
Ne dis rien., Chaque champ ici est souvent utilisé ,Apprenez ici.commandEtSTATEStatut,
COMMAND Les valeurs sont les suivantes: :
Un thread peut avoir l'un des éléments suivants CommandValeur:
Binlog DumpC'est un thread sur la source de réplication , Pour envoyer le contenu du Journal binaire à la réplique .Change userLe thread effectue une action de changement d'utilisateur .Create DBThread effectue une opération de création de base de données .DaemonLe thread est à l'intérieur du serveur , Au lieu d'un thread qui sert une connexion client .Delayed insertLe thread est un gestionnaire d'insertion de latence .Drop DBLe thread effectue une opération de suppression de base de données .FetchLe thread récupère les résultats de l'exécution de l'instruction préparée .Field ListLe thread récupère des informations pour une colonne de tableau .Init DBLe thread sélectionne une base de données par défaut .Long DataLe thread récupère de longues données à partir des résultats de l'exécution de l'instruction préparée .ProcesslistLe thread génère des informations sur le thread serveur .RefreshLe thread rafraîchit la table 、 Log ou cache , Ou réinitialiser la variable d'état ou copier les informations du serveur .Register SlaveLe thread enregistre le serveur de répliques .Reset stmtLe thread Réinitialise les déclarations préparées .Set optionLe thread définit ou Réinitialise les options d'exécution de l'instruction client .SleepLe thread attend que le client lui envoie une nouvelle déclaration .StatisticsLe thread génère des informations sur l'état du serveur .
STATE Le statut est principalement le suivant: :
After createLorsque le thread crée une table à la fin de la fonction qui la crée ( Y compris les tableaux temporaires internes )Heure,Ça arrive.. Même si le tableau n'a pas pu être créé en raison de certaines erreurs , Cet état est également utilisé .altering tableLe serveur exécute en place ALTER TABLE.- checking permissions Le thread vérifie si le serveur a les permissions nécessaires pour exécuter l'instruction .
Checking tableLe thread effectue une opération de vérification de table .cleaning upLe thread a traité une commande et est prêt à libérer la mémoire et à réinitialiser certaines variables d'état .closing tablesLe thread rafraîchit les données de table modifiées sur le disque et ferme les tables utilisées . Ça devrait être une opération rapide .Si ce n'est pas le cas, Assurez - vous que vous n'avez pas de disque complet et qu'il n'est pas très utilisé .converting HEAP to ondiskLe thread est en train de déplacer la table temporaire interne deMEMORYTable convertie en table de disque .copy to tmp tableLe thread travaille sur unALTER TABLEDéclarations. Cet état se produit après la création d'une table avec une nouvelle structure, mais avant que les lignes ne soient copiées . Pour les fils dans cet état ,Peut être utilisé Performance Schema Pour obtenir des informations sur l'état d'avancement de l'opération de réplication .Copying to group tableSi l'énoncé est différentORDER BYDeGROUP BYConditions, Les lignes sont triées par groupe et copiées dans le tableau temporaire .Copying to tmp tableLe serveur copie des tables temporaires en mémoire .Copying to tmp table on diskLe serveur copie des tables temporaires sur le disque . L'ensemble de résultats temporaires devient trop grand .Donc,, Thread change les tables temporaires de la mémoire au format disque pour économiser la mémoire .Creating indexLe thread est en cours de traitementALTER TABLE ... ENABLE KEYSUnMyISAMTableau.Creating sort indexLe thread est en cours de traitement SELECT Résolu à l'aide d'un tableau temporaire interne a.creating tableLe thread crée une table . Cela comprend la création de tables temporaires .Creating tmp tableLe thread crée une table temporaire sur la mémoire ou le disque . Si la table a été créée en mémoire , Mais ensuite converti en table de disque , L'état pendant cette opération estCopying to tmp table on disk.committing alter table to storage engineServeur terminé en place ALTER TABLE Et soumettre les résultats .deleting from main tableLe serveur exécute la première partie de la suppression Multi - tables. Il n'est supprimé que du premier tableau ,Et sauvegardé pour(RÉFÉRENCES) Colonnes et décalages supprimés du tableau .deleting from reference tablesLe serveur exécute la deuxième partie de la suppression Multi - tables,Et supprimer les lignes correspondantes des autres tableaux.discard_or_import_tablespaceLe thread est en cours de traitementALTER TABLE ... DISCARD TABLESPACEorALTER TABLE ... IMPORT TABLESPACEDéclarations.endC'est arrivé à la fin. ,Mais en train de nettoyer ALTER TABLE, CREATE VIEW, DELETE, INSERT, SELECT, or UPDATEAvant la Déclaration.PourendStatut,Les actions suivantes peuvent se produire::Supprimer l'entrée du cache de requête après avoir modifié les données dans le tableau
Écrire des événements dans le journal binaire
Libérer le tampon mémoire,Y compris: blob
Execution of init_commandExécution du threadinit_commandDéclaration dans la valeur de la variable système .freeing itemsCommande exécutée par thread . Certaines des libérations d'éléments effectuées pendant cet état impliquent la mise en cache des requêtes . Cet état est généralement suivicleaning up.FULLTEXT initializationLe serveur se prépare à effectuer une recherche plein texte en langage naturel .initC'est arrivé à ALTER TABLE, DELETE, INSERT, SELECT, or UPDATE Avant l'initialisation de l'instruction . Les actions prises par le serveur dans cet état incluent la mise à jour des journaux binaires 、InnoDBLog et quelques opérations de nettoyage de cache de requête.KilledQuelqu'un.KILL Une déclaration a été envoyée au thread , Il devrait être vérifié la prochaine fois kill Arrêt au drapeau .In MySQL Ce drapeau est vérifié à chaque cycle principal de ,Mais dans certains cas,, Le thread peut encore prendre très peu de temps pour se terminer . Si le thread est verrouillé par un autre thread , Se termine immédiatement après que les autres fils ont libéré leurs verrous .logging slow queryLe thread écrit une instruction au Journal des requêtes lentes .loginÉtat initial du fil de connexion , Jusqu'à ce que le client soit authentifié avec succès .manage keysLe serveur active ou désactive l'index de table .Opening tablesLe thread essaie d'ouvrir une table .Ça devrait être un processus très rapide, À moins que quelque chose ne l'empêche de s'ouvrir .Par exemple,UnALTER TABLEor LOCK TABLE L'instruction peut empêcher l'ouverture de la table ,Jusqu'à ce que la déclaration soit terminée.Vérifiez votretable_open_cache Ça en vaut la peine si la valeur est assez grande .optimizingLe serveur effectue une optimisation initiale pour la requête .preparingCet état se produit lors de l'optimisation de la requête .Purging old relay logsLe thread supprime les fichiers journaux de relais indésirables .query endCet état se produit après le traitement de la requête mais aprèsfreeing itemsAvant le statut.Receiving from clientLe serveur lit les paquets du client.Ce statutReading from netIn MySQL 5.7.8 Précédemment appelé.Removing duplicatesUtilisation des requêtes SELECT DISTINCT Comment faire MySQL Impossible d'optimiser les différentes opérations à un stade précoce .Donc,,MySQL Une étape supplémentaire est nécessaire pour supprimer toutes les lignes dupliquées , Puis envoyez les résultats au client .SELECT Thread Processing statement Suppression de la table temporaire interne après .Si aucune table temporaire n'a été créée,Cet état n'est pas utilisé.
rename result tableLe thread travaille sur unALTER TABLEDéclarations, Nouvelle table créée , Et le renommer pour remplacer le tableau original .Reopen tablesLe thread a obtenu le verrouillage de la table,Mais après avoir obtenu la serrure, remarquez que la structure de la surface sous - jacente a changé.Ça libère la serrure,La table est fermée,Et essayer de l'ouvrir à nouveau.Repair by sortingLe Code de réparation utilise le tri pour créer un index .preparing for alter tableLe serveur se prépare à exécuter en place ALTER TABLE.Saving statePourMyISAMOpérations de table telles que la réparation ou l'analyse , Le thread enregistre le nouvel état de la table à.MYIEn - tête de fichier. L'état comprend le nombre de lignes 、AUTO_INCREMENTInformations telles que la distribution des compteurs et des clés .Searching rows for updateLe thread effectue la première étape pour trouver toutes les lignes correspondantes avant de les mettre à jour .Si UPDATE Modification de l'index utilisé pour trouver les lignes associées , C'est ce qu'il faut faire. .Sending dataLe thread lit et traite SELECTLigne de déclaration,Et envoyer les données au client.Parce que les actions qui se produisent pendant cet état ont tendance à effectuer un grand nombre d'accès au disque(Lire), C'est donc généralement l'état le plus long d'un cycle de vie de requête donné .Sending to clientLe serveur écrit des paquets au client .Ce statutWriting to netIn MySQL 5.7.8 Précédemment appelé.setupLe thread commence un ALTER TABLEFonctionnement.Sorting for groupLe thread effectue un tri pour satisfaire aGROUP BY.Sorting for orderLe thread effectue un tri pour satisfaireORDER BY.Sorting index MyISAMLe thread Trie les pages d'index , Pour optimiser l'opération sur la table Un accès plus efficace pendant .Sorting resultPourSELECTDéclarations,C'est similaire àCreating sort index, Mais pour les tableaux non temporaires .statisticsLe serveur calcule les statistiques pour planifier l'exécution de la requête .Si un fil est dans cet état depuis longtemps, Le serveur peut effectuer d'autres travaux de liaison de disque .System lockThread calledmysql_lock_tables()Et l'état du fil n'a pas été mis à jour depuis .C'est un état très général, Cela peut se produire pour plusieurs raisons . Par exemple, Le thread demandera ou attendra un verrouillage interne ou externe du système pour la table .InInnoDBMise en œuvre LOCK TABLES. Si cet état est causé par une demande de verrouillage externe , Et vous n'avez pas utilisé plus d'un mysqldServeur,Vous pouvez utiliser ceci OptionsMyISAM Désactiver le verrouillage externe du système .--skip-external-lockingMais, Le verrouillage externe est désactivé par défaut , Donc cette option n'a probablement aucun effet .Pour SHOW PROFILE, Cet état signifie que le thread demande un verrouillage ( Ne l'attendez pas. ).UpdatingLe thread recherche les lignes à mettre à jour et les met à jour .updating main tableLe serveur exécute la première partie d'une mise à jour multi - tables.Il ne met à jour que le premier tableau,Et enregistrer pour mettre à jour d'autres(RÉFÉRENCES)Colonnes et décalages du tableau.updating reference tablesLe serveur exécute la deuxième partie de la mise à jour multi - tables, Et mettre à jour les lignes correspondantes à partir d'autres tableaux .User lockLe thread demandera ou attend le verrou de consultation pour la demande d'appel GET_LOCK().Pour SHOW PROFILE, Cet état signifie que le thread demande un verrouillage ( Ne l'attendez pas. ).User sleepLe thread a appelé un SLEEP()Appelez.FLUSH TABLES WITH READ LOCK En attendant de soumettre le verrou.
FLUSH TABLES WITH READ LOCK En attente d'une lecture globale de la serrure ou read_only Réglage des variables du système mondial .
Waiting for tablesLe thread a été informé que l'infrastructure d'un tableau a changé , Il faut rouvrir la table pour obtenir la nouvelle structure .Mais,Pour rouvrir la table, Il doit attendre que tous les autres Threads aient fermé la table en question .Waiting for table flushExécution du threadFLUSH TABLES Et en attendant que tous les Threads ferment leurs tables , Ou le thread est informé que la structure sous - jacente de la table a changé , Il faut rouvrir la table pour obtenir la nouvelle structure .Mais,Pour rouvrir la table, Il doit attendre que tous les autres Threads aient fermé la table en question .Waiting forLe serveur attend de verrouiller le Sous - système à partir des métadonnées Accès Serrure ou serrure ,Parmi euxlock_typelock THR_LOCKlock_typeIndique le type de serrure .Cet état indique une attente a
THR_LOCK:Waiting for table level lock
Ces états indiquent attendre le verrouillage des métadonnées :
Waiting for event metadata lockWaiting for global read lockWaiting for schema metadata lockWaiting for stored function metadata lockWaiting for stored procedure metadata lockWaiting for table metadata lockWaiting for trigger metadata lock
Vous pouvez obtenir l'état actuel du thread en attente de verrouillage ,En particulier la mise en œuvreDDLHeure,Besoin d'attention, Il est facile de ne pas libérer le lien parce que le verrou de métadonnées n'est pas disponible ,Crash de la base de données.
Waiting on condLe thread attend que la condition devienne un vrai état général . Aucune information spécifique sur l'état n'est disponible .Writing to netLe serveur écrit des paquets sur le réseau .De MySQL 5.7.8 C'est parti., Cet état est appeléSending to client.
边栏推荐
- Solution of intelligent management platform for suppliers in hardware and electromechanical industry: optimize supply chain management and drive enterprise performance growth
- Synchronous development of business and application: strategic suggestions for application modernization
- 打家劫舍III[后序遍历与回溯+动态规划]
- 中缀表达式转后缀表达式详细思路及代码实现
- 深入分析,Android面试真题解析火爆全网
- Meilu biological IPO was terminated: the annual revenue was 385million, and Chen Lin was the actual controller
- Zero foundation entry polardb-x: build a highly available system and link the big data screen
- How to do smoke test
- Black Horse - - Redis Chapter
- [paper notes] transunet: transformers make strongencoders for medical image segmentation
猜你喜欢

Dark horse -- redis

Actf 2022 came to a successful conclusion, and 0ops team won the second consecutive championship!!
深入分析,Android面试真题解析火爆全网

学习探索-使用伪元素清除浮动元素造成的高度坍塌

Mathematical knowledge -- code implementation of Gaussian elimination (elementary line transformation to solve equations)

Mysql Information Schema 学习(一)--通用表

Low CPU load and high loadavg processing method

MRO工业品企业采购系统:如何精细化采购协同管理?想要升级的工业品企业必看!

Solution of commercial supply chain management platform for packaging industry: layout smart supply system and digitally integrate the supply chain of packaging industry
![[paper notes] transunet: transformers make strongencoders for medical image segmentation](/img/21/3d4710024248b62495e2681ebd1bc4.png)
[paper notes] transunet: transformers make strongencoders for medical image segmentation
随机推荐
R language ggplot2 visualization: use the ggdotplot function of ggpubr package to visualize dot plot, set the palette parameter, and set the colors of data points and box graphs of dot plots at differ
Tensorflow2.0 自定义训练的方式求解函数系数
反射及在运用过程中出现的IllegalAccessException异常
ACTF 2022圆满落幕,0ops战队二连冠!!
How can my Haskell program or library find its version number- How can my Haskell program or library find its version number?
The second day of rhcsa study
Test technology stack arrangement -- self cultivation of test development engineers
R language uses rchisq function to generate random numbers that conform to Chi square distribution, and uses plot function to visualize random numbers that conform to Chi square distribution
Spark foundation -scala
快速幂模板求逆元,逆元的作用以及例题【第20届上海大学程序设计联赛夏季赛】排列计数
Mind map + source code + Notes + project, ByteDance + JD +360+ Netease interview question sorting
今日直播 | “人玑协同 未来已来”2022弘玑生态伙伴大会蓄势待发
Mysql Information Schema 学习(二)--Innodb表
ROS custom message publishing subscription example
How word displays modification traces
C # use Marshall to manually create unmanaged memory in the heap and use
R语言dplyr包进行数据分组聚合统计变换(Aggregating transforms)、计算dataframe数据的分组均值(mean)
Lucun smart sprint technology innovation board: annual revenue of 400million, proposed to raise 700million
MRO industrial products enterprise procurement system: how to refine procurement collaborative management? Industrial products enterprises that want to upgrade must see!
Cereals Mall - Distributed Advanced p129~p339 (end)