A.S.C. Version: 4.1 serial key or number

A.S.C. Version: 4.1 serial key or number

A.S.C. Version: 4.1 serial key or number

A.S.C. Version: 4.1 serial key or number

LoggerNet Datalogger Support Software

Note: The following shows notable compatibility information. It is not a comprehensive list of all compatible or incompatible products.

Dataloggers

ProductCompatibleNote
21X(retired)The 21X requires three PROMs; two PROM 21X Microloggers are not compatible.
CR10(retired)
CR1000(retired)
CR1000X
CR10X(retired)LoggerNet is compatible with the mixed array, PakBus®, and TD operating systems.
CR200X(retired)
CR206X(retired)
CR211X(retired)
CR216X(retired)
CR23X(retired)LoggerNet is compatible with the mixed array, PakBus®, and TD operating systems.
CR295X(retired)
CR300
CR3000
CR310
CR500(retired)
CR5000(retired)
CR510(retired)LoggerNet is compatible with the mixed array, PakBus®, and TD operating systems.
CR6
CR800
CR850
CR9000(retired)
CR9000X(retired)

Distributed Data Acquisition

Additional Compatibility Information

Communications

LoggerNet runs on a PC, using serial ports, telephony drivers, and Ethernet hardware to communicate with data loggers via phone modems, RF devices, and other peripherals.

Software

The development tool of RTMC Pro 1.x and 2.x is not compatible with the RTMC run-time and the standard RTMC development tool in LoggerNet 4. An upgrade for RTMC Pro must be purchased separately.

Computer

LoggerNet is a collection of 32-bit programs designed to run on Intel-based computers running Microsoft Windows operating systems. The recommended minimum computer configuration for running LoggerNet is Windows 7. LoggerNet also runs on Windows 8 and Windows 10. LoggerNet runs on both 32-bit and 64-bit versions of these operating systems.

Other Products

LoggerNet supports most commercially available sensors, SDM devices, multiplexers, relays, vibrating-wire interfaces, ET107, CompactFlash cards, microSD cards, and PC cards.

Источник: [https://torrent-igruha.org/3551-portal.html]
, A.S.C. Version: 4.1 serial key or number

EA's Revision History Version 4.x

This section is intended to provide a history of the revisions of EA version 4.51, 4.5, 4.1 and 4.0.

For information relating to the history of other versions, select a version below.

Enterprise Architect Version 4.51

Changes and fixes for Version 4.51 - build 751

Fixed display of UML Pattern folders in Resource Tree, now sorted alphabetically
Prevented saving invalid stereotype image path.
Fixed display on sequence diagrams of actors with alternate image derived from their stereotype.
Fixed issue with excluding element details for ActivityInitial, ActivityFinal elements in RTF documentation
Fixed issue where legacy profiles would fail to import metafile images for profile stereotypes.
Fixed issue with Project.ImportPackageXMI automation call which prevented the Strip Guids option from working.
Changed attQualType, linkAttQualName, linkParentQualName, opReturnQualType and paramQualType to include namespace path only if generating namespaces.
Code Template Updates:
- Fixed C++ templates to scope class names in model with outer classes and namespace path if generating namespaces.
- Fixed problem with not generating destructors properly in the Delphi Operation Declaration and Operation Declaration Impl templates.
- Fixed problem in the Visual Basic property get Operation Body template that generated a double quote at the start.
- Fixed C# enumeration Class Declaration template that wouldn't generate non int enum types.
Corrected issue with RTF Report dialog incorrectly setting the saved template when used with saved documents.
Fixed import of MySQL tables where NULL/NOT NULL flags were reversed.
Fixed display of attribute compartment when inherited attributes are being displayed but parent class doesn't have any.
Corrected SQL statement for import of schema from case sensitive SQL Server.
Allowed exception handlers to be set as composite elements.
Corrected Pasting behavior for Embedded Elements to correctly copy element geometries from specified source diagram.
Included Short Description field for Requirement, Issue and Change elements when spell checking.
Fixed saving use case notes > 1024 in length on PostgreSQL repository.
Fixed a bug where the class level option for default file extention didn't work in code engineering.
Allowed for __fastcall methods with a type in the C++ parser.
Fixed bug where code template editor wouldn't display empty user templates.
Added reverse engineering support for Delphi records.
Added integritry check for duplicate diagram links to Data management/Integrity dialog
Modified check when adding connector to allow source element to be locked under security settings, but must still be checked out under Version Control

Changes and fixes for Version 4.51 - build 750

Updated Automation Interface to allow XMI Type specification from Project.ExportPackageXMI() call
Fixed diagram refresh issue that caused deleted element tagged values to remain displayed in diagrams until reloaded
Fixed Licence Management dialogs to use regional date format
Fixed format of sequence message labels when parameter name includes "(opt)"
Fixed display of actors as sequence diagram lifelines when they have alternate image defined
Fixed format of parameterized template labels
Modified behavior of UML Profile imports where stereotypes containing valid notes will not contain the "UML Profile Notes" prefix
Checking out version controlled packages improved. When current package is up to date, offer user choice of;
Force Reload, Accept Current & optionally Refresh Model View. When model view is out of date, force Refresh View.
Improved integration with AccuRev version control. Status messages returned by AccuRev are displayed in EA output window. Generation of
successive XML files for an unchanged package, now produces identical files.
Fixed issue with packagePath macro inside a Java Import template.
Fixed issue with C++ parser including comments in default values.
Made it possible to generate private and protected delphi properties
Corrected display of GUIElement with <<tab>> stereotype
New substitution macros available in code templates:
- %attAlias%
- %opAlias%
- %packageAlias%
- %genOptPHPGetPrefix%
- %genOptPHPSetPrefix%
Code Template Updates:
- Updated the the Operation Body Impl template for C++ to not generate constructors and destructors for structs.
- Updated the Operation Body template for Delphi to generate private and protected Delphi properties.
- Updated the Java Class Body enumeration override template to fix bad list conditions.
Fixed bug which allowed in-place editing of elements when security user had insufficient permissions
Fixed bug with in-place creation of attributes and operations where a failure to parse left the default values on the diagram.

Added <<invokes>> and <<precedes>> connectors for Iconix Use Case toolbox.
Fixed bug in display of varchars in PostgreSQL tables.
Fixed bug in showing inherited attributes/operations in a class in a diagram
Stopped generation of bad using statements for inner classes in a C++ implementation file.
Fixed problem that sometimes stopped method and attribute tagged values being available in custom templates.
Fixed issue were RTF Report generation fails when using an SQLServer-based repository.
Fixed problem where VB.Net import statements were generated without the project name.
Fixed issue where operation sequence messages were not being corrected to reflect changes to operation renaming
Fixed bug when generating DDL CHAR dataypes was missing the length.
Fixed problem on Win9x systems where if CVS did not allow check-in of checked out packages if the username environment variable did not match Windows' user name.
Added option to selectively include Embedded Elements in RTF Document generation.
Fixed issue with operation and attribute scope images in Operations and Attributes dialogs when moving position of feature up or down
Fixed spurious error message when entering MDG licence key before an EA key.
Modified code generation to disallow deleting notes from code when model elements have no code.
Added check for locked element when adding embedded element or dropping class as port or part onto locked element

Changes and fixes for Version 4.51 - build 749

Fixed issue where messages with sequence numbers were incorrectly generated in RTF document format.
Fixed issue where swimlane titles appearing on the Caption Bar would position badly when the diagram's zoom is changed
Added the class modifier keyword "strictfp" to the java grammar.
Fixed issue where the source bar allowed both Sync and Generate buttons to be enabled when a package was selected
Fixed intermittent issues where Eclipse Add-in would freeze or crash EA.
Prevented DDL generation of tables without columns.
Allowed DDL generation of individually selected table operations.
Added DDL generation of referential integrity for InterBase/Firebird table relationships.
Added support for Oracle VARCHAR2(50 CHAR) datatypes.

Changes and fixes for Version 4.51 - build 748

Automation additions, deletions and modifications of terms, tasks and project issues are now reflected in user interface.
IDualConnector.Name is now Read/Write.
Version Control GetLatest can now be disabled on shared models.
Fixed Username/Rego in 747 build incorrectly copied from Shared Key property sheet.
Fixed issue with EA crashing when AutoGenerating Documents
Fixed bug when copying/pasting as new and new name contains an apostrophe.
Fixed Diagram copy/paste issue where copied elements could appear under the wrong parent in the Project View
Added support for FireBird 1.5 data modeling.
Fixed bug that stopped classes within dotted C# namespaces from synchronizing.
Fixed bug that stopped C++ method implementation notes from synchronizing.
Fixed bug where closing a diagram using the tab reverts to an unexpected diagram
Fixed bug in DDL generation of InterBase/Firebird triggers.
Removed option on Sequence diagram page of Tools/Options to show message names in pre UML 1.4 notation
User layouts for version 4.51 reset to avoid display issues with loading layouts from previous versions of EA


Changes and fixes for Version 4.51 - build 747

Enabled outlining (collapsible sections) of source code editor for major languages
Added ability for EA to import Java from .JAR and .CLASS files
Added Dynamic Help docked window to provide instant help on popular topics
Added docked Output window for system and add-in to use when displaying line items to user
Added automation calls to allow add-ins access to new Output docked window
Added dockable Project Management window. Replaces old "Project Management, resources, Risks and Effort" dialog. Similar behavior to docked Tests window.
Fix to include test cases in the Testing Documentation for the root package the command is invoked on.
Added context menu option to diagram for multi-selected elements - allow Layout of Selected Elements Only
Enhanced the resolve ambiguous relationship dialog to show parent classes.
Enhanced the resolve ambiguous relationship dialog to be resizable.
Added the parent elements to the select classifier dialog.
Fix for C++ parser to handle empty template definitions.
Fix code generation issue that could cause a crash when attempting generation of multiple classes to the same, new file path.
Fixed diagram behavior issue where the diagram would incorrectly be set as dirty on selection of a connector
Generate DDL for PostgreSQL - removed ASC from index syntax.
Create foreign key - allowed for foreign key relationship between "integer" and "serial" datatypes.
Generate DDL for PostgreSQL - fixed syntax of trigger generation to allow text before the table name.
Generate DDL for PostgreSQL - added CREATE SEQUENCE statements where column is an autonumber.
ODBC Schema import - removed error message importing SQL Server 7 schema including table/comments.
Fixed issue with display of source code when doing a reverse in quick succession
Fixed issue which caused artifact stereotypes to be reset to default during XMI import.
Fixed issue which caused EA to crash when generating RTF reports for Package Metrics.
Enabled saving UML Profiles as either of EA's current or legacy formats.
Fixed issue where EA would raise an exception when trying to save an empty package as a UML profile.
Fixed issue where Artifact element names were being incorrectly drawn in diagrams.
Generate DDL for MySQL - fixed position of NOT NULL for ENUM and SET datatypes.
ODBC Schema import - fixed issue where EA was not distinguishing between SQL Server unique constraints and unique indexes.
ODBC Schema import - added option to import directly into a selected package when no diagram is open.
Ensure Close button in diagram caption bar is repainted correctly in all situations and not overwritten by caption text
removed Multiplicity context menu item from Actions
Corrected Action element drawing behavior to prevent Action Kind text overwriting the stereotype.
Fixed bug where composite and embedded elements would behave erratically with SQL Server.
Fixed issue where EA would abnormally terminate when browsing operations in elements.
Added option to Tools/options dialog - Object page ... ability to show Port and Part type always.
Disallow MDG connection at root package.
Fixed issue with misreported page sizes on RTF reports generated from EA.
Fixed issue where element icons were incorrectly drawn when diagram drawn to RTF or image file using Windows 2000.
Corrected Attribute notation for ordered multiplicity for UML 2.0 conformity
Fixed issue with packages displaying wrong contents on diagrams, if sibling packages used the same name
Fixed issue with xml code page when applying style sheets to XMI export
Fixed Tagged Value drawing issue where tags with null values were not drawn.
Fixed issue where Child diagrams were incorrectly created for Change and Issue elements.
Fixed issue where dropping elements (such as Requirements) from the tree onto another element in a diagram would not update the diagram and docked windows as expected.
Added support for attaching linked element files to HTML documentation.
Added support for naming Fork/Join elements in Activity diagrams.
Fixed issue where changing the type of an element in a diagram may affect position of the same element in other open diagrams
Corrected diagram notes output behavior in RTF documentation to be more consistent for package and element diagrams.
Connected default project director yset in Tools/options to File/Open and open Model File dialogs
Corrected issue whereby filters applied to the selection of objects in the RTF report generator dialog would not apply for embedded elements.
Added General properties/Advanced properties command support when selecting elements in the Project View.
Added button to Tagged Values docked window to allow quick access to Tag Definitions from the Configuration main menu
Modified new tag dialog to allow direct entry of pre-defined tags of type "string" only
Modified Tag dialog to check for data mismatch between Mask and Template length when Custom tag types define mask and template
Added priority field to the default Maintenance/Maintenance Item HTML templates.
Generate DDL - added option to generate table alias as table name and column alias as column name where it is provided.
Fixed issue with generating RTF reports containing return characters which were not being picked up
Modified drawing of Collaboration to allow elongated shape when "Allow Elongated use Cases" option is checked
Modified HTML and RTF Report generators for performance increase and to overcome DMBS limitations on very large models
Fixed issue where the Hide Property Methods Diagram command would not work for Delphi properties.
Added support for showing vertical swimlane names in the diagram caption bar.
Import DDL Schema - fixed bug when importing table with at least 2 indexes, one clustered from SQL Server - wasn't setting clustered tag.
Modified Sequence diagram drawing to allow return messages to appear at source activation level
Added support for code engineering of Java 1.5, C# 2.0 and PHP 5.0
Added support for using literal numbers in code template function macros.
C++ reverse engineering now assigns a typedef name to anonymous types where available
Fixed bug where parsed comments in C++ implementation where not parsed
Fixed issue with Toolbox scroll buttons being disabled in very rare cases
Fixed bug in the XML exporter where an exception is raised if a tagged value contains an apostrophe character.
Fixed bug with various dialogs not being translated for international users.
Fixed performance issue where copying attributes and operations from the Project View for very large models.
Modified RTF Report Generator to include Feature Aliases, Project Management items, Model Glossary, Issues and Tasks.
Fixed issue with drawing and printing text in EA running on CrossoverOffice 4.0 and above.
Fixed issue where Project View item where class elements were not being updated when profile attributes and operations were created for them in a diagram.
Changed HTML templates to make output easier to read
Updated directory code import with namespaces to close all namespace diagrams and lay them out according to the options.
IElement::ParentID fixed (IDualElement was working).
Fixed behavior where diagram-specific commands would not process correctly when switching between views using ALT-Left and ALT-Right keyboard shortcuts.
Modified EA to switch to the next diagram to the right of one just closed (where possible) with the tab context menu command.
Fixed behavior where Sequence Message names would incorrectly display when the "Use UML 1.4 Message Names" local option is turned off.
Added options page for PHP containing default source extension, import extensions, default directory, PHP version and property prefixes.
Modified Tagged Value property dialog to allow structured tags to be defined on an individual basis (ie. in the Tag Notes section use Type=<tagtype>;)
Corrected an error in syntax of generated stored procedures.
Fixed issue where Project.PutDiagramImageToFile would hang EA when an image drawing error has occurred.
Added additional fields to Project/Project Statistics dialog (Element Tests, Scenarios etc.)
Added support for Corporate Floating License (shared keys). Corporate floating licenses will be available as a separate EA product in the near future
Fix to include test cases in the Testing Documentation for the root package the command is invoked on.
Corrected issue where multiple classes with same name may cause incorrect selection of classifier in Attribute, Operation dialogs
Fixed issue with Default values for operation parameters when edited using in-place editor
Fixed issue when adding element to diagram which has been modified by another user
Fixed problem where new class inserted into a C++ header file was added after the #endif
Fixed erroneous import statement generation from aggregation links
Added PHP to the Create Property Dialog
Some additions to Undo feature (connector line points, format toolbar colors, sizing element with keys)
Fixed issue with "Create Property" dialog when used on class with no code generation language set
Version Control GetAllLatest feature now accepts single response on behalf of multiple packages.

Code Template Updates:
-Updated the Operation Body template for all languages. Now implements the use of the option 'Generation->Wrap long comment lines'.
-Updated Java and C# templates to include support for generics.
-Updated PHP templates to provide PHP 5 support.

Enterprise Architect Version 4.5

Changes and fixes for Version 4.5 - build 744

Fix to include test cases in the Testing Documentation for the root package the command is invoked on.
Fix for element copying for Composite Activities States and Classes to create new ones on Paste as New.
Enhanced the resolve ambiguous relationship dialog to show parent classes.
Added the parent elements to the select classifier dialog.
Shared dialog appears now when UML Diagram Properties is clicked.

Changes and fixes for Version 4.5 - build 743

Fix issue with Oracle in countries using, as decimal separator - affected attribute and operation dialog.
Fix for issue when deleting connectors that can occur in some models.
Fix for issue where Matrix profiles saved with duplicate names would incorrectly be allowed to occur.
Fix package drawing where diagram shows package with requirements or other compartments - package could become very large.
Fix for drawing behaviour of CallOperation Action.
Modified behavior when dropping multiple Requirements from Project Browser to not create Realizations by default.
Added check for duplicate GUIDs to Data Integrity dialog.
Modified menus to show "Operation" instead of "Interface" for Component and Interface operations.
Changed behavior when pasting duplicated elements into diagrams which are owned by other elements. Pasted object now receives parentID of diagram.

Changes and fixes for Version 4.5 - build 742

Fix for critical issue with Oracle repository that could adversely affect a number of functions, particularly security and element features.
Fix for issue with Timeline labels not drawing correctly
Fix for Collaboration message direction indicator
Modify Toolbox to remove Profile folder if Profile is deleted from Model
Some improvements to the speed of deleting large packages
Fix for Foreign Key dialog which could occur when both a Unique Index and Primary key contained the same parameter

Changes and fixes for Version 4.5 - build 741

Fixed issues when using Ctrl + Arrow keys to move elements in the project tree up or down the order
Fixed issue with project tree not receiving focus when clicking in the background area - impacted scrolling with mouse wheel and similar actions
Adjusted F4 hot key and element context menu for "Appearance" to support multi-select appearance change in the same fashion as Ctrl+Shift+E already did
Fixed issue where Package Elements were not drawn correctly when the "Show Requirements" option was enabled on the diagram.
Fixed issue where some resource elements made visible in the toolbox, were incorrectly placed onto UML diagrams.
Fixes issue where the Resource Tree would not refresh when Reference Data was successfully imported.
Fixed bug on Oracle repository when saving changes to a class attribute.
Fixed Oracle date comparison in Resource and Tasking Details Report.
Modified "Create a New Model" command to create a writeable model from a read-only base model.
Added support for copying files linked to in diagrams for HTML documentation generation.
Ensure editable item selected in table attribute list when dialog opens.
Fixed error modifying test having apostrophe in name.
Fixed display of use case metrics, ecf and tcf values on Oracle and PostgreSQL.
Fixed issue with diagram when resizing class and Object option "Auto-Reize marks dirty" is set on
Fixed issue where drawing of movable labels could cause GDI leaks in Windows9x
Fixed issue where creating new elements using the Elements->New Element command could cause EA to crash
Modified EA to allow creation of an instance of an Artifact
Some improvement to load time of very large models
Fixed issue where EA would not load the last-used User Layout when starting.
Fixed issue where HTML document generation would not include line breaks in html note fields when the "Preserve White space in Notes" option was used.
C++ parser updated to:
- Ignore any comments that appeared before compiler directives.
- Ignore comments before method parameters.
- Handle bitfield size specifications.
VB.Net parser updated to allow bracketed keywords for function and variable names.
Fix for Java parser where a new line appears between the function name and opening brace.
C# Parser updated to handle qualified indexers.
Fixed bug where the attProperty macro only sometimes worked.
Allowed 'Create Package per Namespace' for Import Source Directory with Java.

Data Modelling:
- Fixed import of SQL Server table and column comments.
- Fixed DDL MySQL UNIQUE INDEX syntax.
- ODBC Schema Import: fixed bug importing/generating unconstrained Oracle NUMBER datatype.
- Fixed bug creating foreign key into a unique column of a table where that table also has a primary key.
- Added multiple stereotypessupport in XMI 1.2 export for objects.
- Added metamodel tag to XMI 1.2 header.

Changes and fixes for Version 4.5 - build 740

Updated application "look and feel" UI components.
Added "2005" Visual Style (from View Menu)
Added a number of additional default hot-key combinations for commonly used functions
Added ability to multi-select elements within the project view for dragging and dropping and/or deleting
Added option (Tools/Options dialog)to place diagram "tabs" at top instead of bottom of mainview (requires restart)
Added support for vertically aligning moveable element labels (eg. Port name).
Added ability to show UML Technologies and UML Profiles in the UML Toolbox as new pages. Set by right clicking on Technology or Profile in resource View
Improved application load times and overall stability on CXOffice Linux edition
Fixed issue where UML Toolbox scroll buttons may not activate when changing between diagram types
Added ability to have multiple Version Control configurations in the same model.
Added direct support for CVS in addition to existing SCC support.
Modified Interaction fragment dialog to allow larger drop list under Windows 2000/NT
Modified Sequence message to include "Set Label Visibility" context menu option
Extended Object Search on MySQL repository to include attributetags and operationtags.
Connection to repository dialog - replaced unused radio buttons with DBMS text information.
Correction to the Roles dialog to save changes to the Note and Description fields when modified
Corrected behavior where the notes docked window would lose its contents if an element, feature or connector is modified by one of the properties dialogs
Fixed problem with Connector when setting Source and Target thru the Connector Detail menu function. End point offsets are now set to zero when re-assigning source or target to ensure new end point is centred
Added ability to synchronise new class members with package visibility into a C++ class (with public visibility).
Fixed importing of inner interfaces in C#.
Modified Activity drawing to hide stereotype when Diagram "Hide Element Stereotype" option checked
Modified Attribute dialog to pick up default type on first entry
Fixed display of use case metrics, ecf and tcf values on Oracle, PostgreSQL and ASA repositories.
Added ability to "Set Font" on multiple selected elements in diagrams (element context menu)
Fixed issues with unwanted whitespace when importing C# comments.
Fixed bug with attProperty field substitution macro.
Allowed for unit qualified parameter types in Delphi import.
Fixed problem with java import when an empty comment (/**/) appears in the source.
Handle the declaration of multiple attribute in a single statement better in the Java parser.
Added support for tagged values on operation parameters
Updated dockable tag window to display tags for connector ends and operation parameters
Removed "Tagged Value" tab pages from Attribute, Operation, Connector, Object and Requirement dialogs
Added <memo> Tagged Value type - used for storing large and complex data in a tagged value.
Corrected behavior in EA where text on printed or clipboard-copied diagrams were incorrectly overlapped.
Modified drawing behavior to prevent element names overlapping the stereotype icons in Artifacts and Class Elements.
Fixed issue with using cursor keys to resize selected elements.
Fixed issue with attribute losing constraints when dragged and dropped between classes in the Project Browser
Fixed issue with dragging and dropping a parent element onto its child within a diagram causing a circular reference.
Added Requirements #TYPE# tag & updated default HTML templates to show Object requirements type in HTML documentation
Updated RTF document generator to include Diagram Note elements when the "Document All Elements" option is turned on
Fixed problem in Java parser where a comment on the same line as a inner class or function close break stopped the thing following from importing properly.
Added a prompt to confirm code template deletions.
Added a save prompt when closing the code template editor.
Removed "Set as Default" checkbox from the Language Datatypes dialog.
Made the help button for the Language Datatypes dialog go to right page of help
Fixed problems with association types not being correctly imported.
Improved XMI 1.2 export for class diagrams and state machines.
Fixed problem with root packages not importing correctly as root nodes.
Fixed issue with importing and stripping GUID values resulting in duplicate object ids.
Fixed issue with MDG Link for Visual Studio .Net and Eclipse when Merging/Generating View level packages (occurs in 738 and 739)
Fixed bug in Glossary report to take Language adjustments into account
Fixed bug in parser that caused it to fail when the following appeared in a string. "\\\""
Fixed bug where import statements where only generated from one end of an association with unspecified direction.
Fixed bug where the arrows on collaboration messages in communication diagrams would not update after moving the association connector
Added option to show line numbers in margin of source editor
Added "Usage..." menu option in Project Tree context menu for any Element type. Provides list of diagrams element appears in.
Fixed bug where elements with movable labels would not apply the element's customised fonts.
Fixed bug where editing diagram notes in Notes window wasn't marking diagram as unsaved.
Fixed error with XMI import and export of connector color and thickness
Fixed bug where changing case of object test was not saving.
Creating a new VB.Net property with only Read or Write checked now sets the property to "ReadOnly" and "WriteOnly" respectively.
Added a subset of version control functions to the Project View "Rootnodes"
Modified "New Package" and "New View" functions when inserting at the Root level (ie a new view is being added) to prompt for Icon type (Use Case, Class etc.)
BrowseProject dialog (used in Set Project Template Package, Matrix and Move Requirement External) modified to match project package positions, instead of simple alphabetic
Fixed issue with diagram layout not working as expected when importing source code
Modified diagram view to hide grid when zoom level is below 40%
Fixed issue with automation interface - when using the DiagramLink.IsHidden property - depending on the calling convention of the client application
Fixed issue where Classes dropped onto a Sequence lifeline were incorrectly being dropped on as a composite element.

Data Modelling:
- Generate DDL - fixed bug where cascade constraints not generating for MySQL foreign key relationships.
- Added NOT FOR REPLICATION option to SQL Server data model table columns.
- Fixed setting of focus back to column name after saving column.
- Added option to generate a single DDL script for tables selected on a diagram.
- Fixed bug that truncated long check constraints.
- Added support for import of Adaptive Server Anywhere 7 schemas.
- Fixed bug where non-foreign key associations between tables were generated as foreign keys.
- Added support for MySQL ENUM and SET datatypes for generating DDL.
- Modified Foreign Key Dialog to sort foreign key parameters to match datatypes of primary key.
- Modified Foreign Key Dialog to allow moving position of foreign key and primary key columns.
- Fixed import of foreign keys from MySQL on Windows.

Code Template Updates:
- Added checks for package visibility class members in the C++ Class Body template.

 

Enterprise Architect Version 4.1

Changes and fixes for Version 4.1 - build 739

Removed Tagged Values tab page from Element, Attribute, Operation and Connector dialogs. All tagged values should be added and edited using the dockable Tagged Values Window (View/Other Windows/Tagged Values)
Modified move algorithm to correctly preserve layout of complex objects with deeply nested Parts and Ports, States and other Embedded Elements, together with their Custom Connector routing
Modified display of Test docked window to ensure it is correctly refreshed with currently selected object information when first shown or made visible
Modified XMI export to exclude "Encoding" attribute of XML instruction when Encoding string is set to nothing in Tools/options/XML Encoding
Adjusted tabular RTF output to scale with the user-selected width of the output page.
RTF Report dialog now saves Page setup with the template and no longer overwrites the default values
Fixed Find Object search dialog (Ctrl+F) so that "Scenarios, Tags etc" option works on MySQL repository.
Fixed bug on PostgreSQL and Adaptive Server Anywhere repositories when importing Reference Data having a null field.
Fixed bug importing table from MySQL where table name includes spaces.
Option added to Tools/Options/Object page to always show State Compartment divider under State name
Foreign Key dialog - allow saving only if there's an update of an existing FK or source and destination columns have been selected.
Modified XMI import to allow for embedded models in other objects.
Modified XMI export to exclude all diagram information when 'Export Diagrams' is not checked.
Resolved some compatibility issues in XMI 1.2 export to support Netbeans MDR (using uml2mof).
Fixed bug where packages exported to XMI may not have had their stereotype preserved.
Added option to Tools/Options dialog, Colors page. Allow showing of Project Custom Colors in Format Toolbar color palettes. Provides an aid to modeling with defined color set.
Fixed various bugs in the VB.Net parser
Restrained Part when dropped from Project Tree on to diagram to require Parent container is on diagram already
Added option (true by default) to Tools/Options/Object dialog ... duplicates Inheritance and realization links for an Edit/Copy (Ctrl+Shift+V)
Added check when saving diagram for possibility of diagram being deleted or reloaded through XMI. EA will reload containing package and re-show diagram if it still exists
Added check for missing elements when selected in tree - may occur on XMI import/export or element deleted by another user. Containing package is reloaded.
Modified check on moving element in diagram to preserve current element parent for deeply embedded elements.
Added "Const" tag type to list of supported tagged value types defined in Configuration/UML/Tagged Values. Default value must be set also.
Fixed issue with image scaling of embedded images in RTF documents when viewing under Word 97 or Word 2000.
Fixed Package drawing in diagrams to use alias names for package elements if available and the relevant option is enabled in the diagram
Modified "Paste as Link" function to include all related connection geometries between elements included in the copy
Fixed issue where operation throws tag was not updated during reverse engineering.
Added diagram option to display operation parameters by name only

Changes and fixes for Version 4.1 - build 738

Further improvements and enhancements to docked tag values window
NOTE: Tag Value dialogs and tab pages in object, operation and attribute properties dialogs will be deprecated and removed in a future build of EA.
All tagged values will only be editable thru the docked tagged window.
Added ability to define custom Tagged Value "types" and display specific property editors for each in docked tagged window.
Currently structured tagged types include:
Integer values with lower and upper bounds
Float values (with bounds)
Color value
Bool value
String value
DateTime value
Custom value - which includes ability to define edit Mask, input Template and Valid Characters for input
Lists - use some inbuilt model lists as drop lists. Eg. Authors, Clients, Resources, Metrics,ObjectTypes
See HELP file for full list of structured types

Inclusion of Interop.EA.dll file for .NET developers wishing to build 'strongly named' add-ins for EA. Deployed to EA install directory.
Suppressed popup dialog detailing DBMS connection information for data transfer and data compare between models.
Fixed bug on ASA repository where adding elements wasn't incrementing their names.
Changed button caption on Configuration | Database Datatypes dialog from Cancel to Close.
Fixed bug where focus was not given to the Search Project dialog when called by the "Search Tree" command on a package in the Project View
Set default to single output file for DDL generation of a package.
Fixed bug where table has foreign keys into > 1 other table - changing any FK operation name corrupted the FK links.
Fixed bug saving creation of FK relationship on Oracle repository.
Fixed creation of foreign key cascade constraints and corrected DDL generation of cascade constraints.
Fixed bug on MySQL repository where option "Show Linked Items in Package" selected and diagram containing linked packages was opened.
Fixed Save button behavior on operations dialog, enabling when pre- and post-condition types changed
Fixed RTF Report dialog box behavior to retain user selections that were incorrectly overwritten when user uses the file browser to select a file
Generate DDL for PostgreSQL - removed extra comma from last column when it has an inline comment.
Fixed behavior where the Project View failed to correctly display type changes for Exposed interfaces
Updated Code Template Editor to be non-modal.
Connectors now derive lock state from diagrams.
Added non case-sensitive check of primary keys when adding UML Stereotypes.
Fixed error creating foreign key on Oracle repository.
Fixed bug where moving Diagram Frames and elements in a multi-select would crash EA
Corrected double-move behavior on selected elements inside selected parent elements
Significantly improved diagram context menu behavior in very large models
Corrected HTML document output to omit trailing ", " characters in the "Goto:" section for an element
Rendered <title> tag for HTML document generation
Added password encryption for Oracle and SQL Server repository users.
Added replication information to About box.
Corrected Oracle DDL generation of table owner in 'alter table add foreign key' statements.
Fixed display issue with instances in Project Tree missing class name on first load
Corrected SQL Server DDL generation of delimiting characters '[]' around target table name in alter table..add foreign key statement.
Corrected EA model behavior so that Realized elements no longer inherit stereotypes automatically
Added prompt to discard changes when user cancels Element properties dialog.
Fixed error that caused EA to crash on Applying Z-Order on elements with embedded elements
Modified Project View to return focus after XML or Source Code Control I/O operation
Modified Locking to prevent label editing of package under "Full Lock"
Fixed bug where VB.Net class comment was inserted after the class attributes.
Fixed bug in operations dialog when attempting to change between operations when there were unsaved changes.
Fix in PHP parser to allow Array default parameter values.
C++ importing now follows options in the C++ options page for where method comments should appear.
Upper bounds are no longer set when importing multidimentional arrays.
Allowed C++ comments to start with '///' as well as '//' in the one block.
Fixed saving of Registration user name and company.
Fixed saving of default version information for new EA Diagrams
Removed option from Tools | Options | Generation | Attributes/Operations page: "Generate Get/Set methods for associated attributes"
Fixed issue with Object Scenario tab page. After adding new Scenario, previously edited scenario could become the current item in the list.
Modified Element context menu to change Space Evenly Horizontally and Vertically with Across and Down respectively.
Corrected autosize behavior on Class parents, Expansion Regions and Timing to prevent the autosize occurring on zoom scales less than 60%
Fixed error with import of Stereotypes thru XML from .EAP file to SQL Server or Oracle
Added Tagged Values to the items copied from an element residing in the Project Template package
Modified package drawing code to allow resizing of package elements when some contents are hidden by their scope
Added 'Z' and 'X' as simple hotkeys to zoom in and out of diagram. 'C'=zoom to 100%, 'V' = zoom to fit
Fixed issue with visual modifications to element in diagram (font, border color etc.) being lost in some cases when property dialog invoked prior to full diagram save
Fixed issue with context item for notes, tagged values etc. not being set when scrolling thru elements in the "Report View" view of a diagram

Code Template Updates:
- Updated VB.Net templates to write 'Namespace' instead of 'namespace'
- Fixed bug in VB.Net templates that meant const attributes weren't generated properly.
- Changed 'Null' to 'Nothing' in the VB.Net Operation Body template

Changes and fixes for Version 4.1 - build 737

Added dockable Tagged Properties window. Provides the ability to quickly view and edit tagged values (custom properties) for:

Elements: Including owned tagged values and inherited tagged values
Object Instances: Show owned tags and those obtained from ther classifier
Ports and Parts: Like objects - owned tags plus Port/Part "Type" instead of the classifier. Tags are included for all parents etc. of the Port's Type.
Attributes: Including owned tagged values and those received from attribute type classifier (including inherited ones)
Operations: Owned properties only
Connectors: Owned properties only
When over-riding an inherited property, EA copies down the tag to the child and sets the new value, leaving the original tag unchanged

Automation Interface changes:
Element TaggedValuesEx gives a merged list of all tagged values owned or inherited by an element
Attribute TaggedValuesEx gives a merged list of Tags (EA.TaggedValue) obtained from the Classifier (and its parents) only. Owned Attribute Tags are not included. Tags with the same name as an Owned tag are not included in the merge list.
Repository.GetCounts() has been added. This provides a very simplistic count of the number of elements in a selection of major tables.
In this way you can detect additions and deletions (but not modifications). The returned string includes the following for each major area:
ITEMNAME=<count of elements in table>:<sum of id's as checksum>;
FlagUpdates property - read/write. Enable this flag to have EA update an internal flag everytime an update occurs. Query flag with the call below
LastUpdate property - read only - <guid of instance>:<guid of update> Used from automation to determine if the model may have changed
InstanceGUID property - read only: random ID assigned when an instance of EA starts up.
Modified Project.ImportPackageXMI() to accept raw XML in place of a filename. Other options remain the same.

Added diagrams, attributes, operations and connectors to the dockable Notes window. Now it is possible to edit notes for these elements without invoking their property window
Fixed issue with code generation templates not being reloaded after being modified on another machine
Fixed reversed column order when importing tables from PostgreSQL.
Fixed errant DEFAULT keyword when generating PostgreSQL DDL.
Fixed enable/disable problems with Project Details dialog
Fixed "Zero length string" problems with Project Details dialog
Fixed issue with applying stereotypes dragged from Resource View
Fixed issue where the Relationship matrix would wrongly display as a dialog when a Matrix profile is double-clicked in the Resource View.
Fixed issue where emf / wmf diagrams in the RTF Report are not created to fit the width of the page.
Fixed issue where icons for elements drawn with stereotype icons were incorrectly drawn when printed or exported to the clipboard or as an image file.
Modified Attribute and Glossary dialog to prompt when "Add New" would overwrite pending changes to existing record
Modified TestDetails and Maintenance dialogs to prompt when "Add New" would overwrite pending changes to existing record
Modified Diagram::Save function to ensure Undo counter reset and main menu "Edit/Undo" greyed out accordingly
Added some speed enhancements to XMI export of large models
Added ability to create and execute custom templates for Class, Attribute, Method, Parameter and Import
Imports needed by inner classes and all classes after the first in a file will now be generated by the %fileImports% macro.
Fixed bug on Oracle repository involving European comma as decimal separator.
Added "F2" as shortcut key in Project View to begin edit of current item name
Added "Get All Latest" facility to Version Control.
Added Element.PropertyType property (r/w) to Element automation interface. Sets property type for Ports and Parts only
When adding a generalization link between elements, EA will now copy down the parent Stereotype (if one exists) to the child
When dropping a class as a Port or Part onto another element, the resultant Port or Part will have the Stereotype of the classifying type
Some enhancements to improve performance over slow (for example ADSL or ISDN) links
Added offer to save any unsaved changes on navigation away from combined fragment dialog.
Corrected behavior where elements in boundaries were not moved on multi-select moves.
Added language datatypes to base model : C# : string, C++ : bool, wchar_t
Added syntax highlighting for Visual Basic to Source Code Viewer
Updated Configuration menu item to display "Local Paths" instead of "Local Directories"
Fixed automation error for Attributes when loading with ClassifierID, but referenced Classifier is not in current model
Added ability to delete Linked External Requirement (dependency link) from Requirements tab page of Object properties dialog
Fixed FileOpen automation method so that subsequent calls do not error.
Fixed problem where EA Unicode on Win98 could start with project view 'locked'

New substitution macros available in code templates:
- %opReturnQualType%
- %paramQualType%
- %importClassName%
- %importFileName%
- %importFromAggregation%
- %importFromAssociation%
- %importFromAtt%
- %importFromDependency%
- %importFromGeneralization%
- %importFromMeth%
- %importFromParam%
- %importFromRealization%
- %importInFile%
- %importPackagePath%
New function macros available in code templates:
- %REMOVE_DUPLICATES(<source>, <separator>)%
- %TO_UPPER(<string>)%
%fileImports% macro now lists imports for classes needed by all classes in the file.

Code Template Updates:
- Java File template updated to remove extraneous white space after package statement

Changes and fixes for Version 4.1 - build 736

Fixed bug with State elements when selected in diagram and having no inplace feature highlighted, could cause crash when accessing main Element menu
Modified state element drawing to better support shadow at large and small zoom sizes
Modified Metrics, Risk, Effort and Allocation dialogs (from element context menu/Project Information) to be readable when host element is locked
Fixed issue with creating images of diagrams containing elements with alternate images
Fixed issue with Objects in project view occasionally displaying blank name after editing properties
Fixed issue with "Return" key not working as expected in Notes window and SourceCode Editor

Changes and fixes for Version 4.1 - build 735

Major update to EA diagram functionality to allow inplace editing and selection of many internal element features:

1. Element Name. Generally allow selection and editing of name within diagram element
2. Element stereotype. Generally allow selection and editing of stereotype within diagram element
3. Attributes. Allow selection, invocation of property dialog, in place editing, new, delete and modify from within diagram element
4. Operations. Allow selection, invocation of property dialog, in place editing, new, delete and modify from within diagram element
5. Tagged Values. Allow selection and invocation of property dialog
6. Requirements & Constraints. Allow selection and invocation of property dialog
7. Maintenance items (Defects, Changes, Issues, Tasks) Allow selection and invocation of property dialog
8. Test Scripts. Allow selection and invocation of property dialog
9. Added ability to add Test and Maintenance items from a hot key on element in diagram
10. Operations and Attributes support insertion of new items at any point within the current ordered set
11. In place editing of operations and attributes supports context menu to allow quick entry of some keywords, and selection of classifier from current model
12. Ability to accept changes to attribute or operation and open up a slot for a new item immediately using Ctrl+Enter
13. New "Inline Features" submenu added to main menu Element section.
14. Added ability to navigate a diagram (move current selection) using Ctrl+Shift+ <arrow keys>. This will move current selected element across, down & etc.
15. Added hot key to toggle a selected element's highlighted editable feature on and off (Shift + Enter)
16. When an element is selected and in "highlighted feature" mode, arrow keys (up and down) can be used to move up and down the features.
17. For users of MDG Link to Visual Studio .Net and the upcoming MDG Link to Eclipse, Ctrl+E pressed on a selected operation or attribute will activate that feature in the other application

Hot keys modified for this build are:
F2 Edit Selected
Enter View/Edit Properties of selected
Ctrl+Shift+Insert Insert new after selected
Ctrl+Shift+F9 Add attribute
Ctrl+Shift+F10 Add operation
Ctrl+F11 Add other (test, maintenance item)
Ctrl+Shift+Delete Delete selected feature from model
Ctrl+Shift+<arrows> Navigate diagram selection
Shift+Enter Toggle element highlight mode on and off

Other keys while editing in place:
Enter Accept current changes
Ctrl+Enter Accept changes and open slot for new item
Esc Abort editing (no save)
Shift+F10 Context menu for inplace editing
Ctrl+Space Invoke Classifier dialog

Other changes:
Fixed support for Activity Partition elements in UML 2.0 Profiles
Fixed bug in automation method Resource.Update()
Fixed loading of connector foreign key info where unique index involved.
Fixed checking of columns selected for foreign key creation.
Fixed ODBC schema import from Oracle where user doesn't have sufficient permissions.
Fixed CSV Import/Export Specifications dialog to correct abnormal save behavior
Improvements to XMI export speed for EA format export
Allow Root node to be imported from XMI at Root level
Some minor fixes to RTF document generation to show method pre-condition notes
Fix import of connector association-end stereotype from XMI
Fix XMI import issue which could very rarely place import under wrong package
Changed Attribute/Operation dialog behavior to maintain list selection on deletion of an attribute or operation.
Fixed import of self referencing foreign keys from PostgreSQL.
Added support for multi-page printing for Diagrams.
Fixed SQL Server SQL Drop syntax where table owner included.
Added Status as a column in the Report view
Fixed MySQL DDL syntax for primary keys, indexes and comments.
Fixed Issue.Version on dual interface for automation.
Added ODBC DDL import of MySQL table types.
Fixed ODBC DDL import of MySQL PRIMARY index on primary keys.
Fixed issue with the VB parser concerning comments after a type declaration.
Fixed issue with the VB parser not correctly importing the first attribute of a type.
Fixed problem in the Java parser where it didn't import comments on a single line.
Fixed problem with delegate functions causing problems in the VB.Net parser.
New substitution macros available in code templates: %genOptVBVersion% and %eaVersion%
Renamed Collaboration diagram to Communication diagram in project view new child diagram context menu.
Fixed excess memory when importing large Oracle database through ODBC.
Corrected RTF document output behavior for both RTF Documentation and RTF Diagram only Documentation to fit large diagrams on the RTF output appropriately.
Improved MySQL ODBC schema import and DDL generation.
Fixed DDL generation of Oracle table comments and default values.
Fixed display of foreign keys where two columns from one table reference a single column of another table.
Fixed generation of duplicate foreign key names on a single table.
Fixed bug where deletion of table attribute did not also delete it as an operation parameter.
Fixed problem with name display of inner classes in tree after invoking property dialog via double click
Added option to set default DBMS on Configuration | Database Datatypes dialog.
Fixed XSD issue where attribute group references omitted the target namespace prefix tagged value
Fixed XSD issue where attribute group references omitted the target namespace prefix tagged value.
Updated Resolve Ambiguities dialogue to include full path of displayed packages during reverse engineering.
Fixed issue where Save as UML Profile command would not function when called from the Project View
Improved PostgreSQL ODBC schema import.
Fixed issue where setting End Source Activation in Sequence diagram could in some cases also set Extend Method Invocation
Modified Ctrl+L hotkey for Ports and Parts to invoke SetPropertyType function instead of SetClassifierD
Modified element Tagged Values tab on Property dialog. Synchronize button now works with Typed elements as well as classified ones (eg. Ports and Parts)

Источник: [https://torrent-igruha.org/3551-portal.html]
A.S.C. Version: 4.1 serial key or number

High Performance MySQL by Jeremy D. Zawodny, Derek J. Balling

Indexes allow MySQL to quickly find and retrieve a set of records from the millions or even billions that a table may contain. If you’ve been using MySQL for any length of time, you’ve probably created indexes in the hopes of getting lighting-quick answers to your queries. And you’ve probably been surprised to find that MySQL didn’t always use the index you thought it would.

For many users, indexes are something of a black art. Sometimes they work wonders, and other times they seem just to slow down inserts and get in the way. And then there are the times when they work fine for a while, then begin to slowly degrade.

In this chapter, we’ll begin by looking at some of the concepts behind indexing and the various types of indexes MySQL provides. From there, we’ll cover some of the specifics in MySQL’s implementation of indexes. The chapter concludes with recommendations for selecting columns to index and the longer term care and feeding of your indexes.

To understand how MySQL uses indexes, it’s best first to understand the basic workings and features of indexes. Once you have a basic understanding of their characteristics, you can start to make more intelligent choices about the right way to use them.

To understand what indexes allow MySQL to do, it’s best to think about how MySQL works to answer a query. Imagine that is a table containing an aggregate phone book for the state of California, with roughly 35 million entries. And keep in mind that records within tables aren’t inherently sorted. Consider a query like this one:

SELECT * FROM phone_book WHERE last_name = 'Zawodny'

Without any sort of index to consult, MySQL must read all the records in the table and compare the field with the string “Zawodny” to see whether they match. Clearly that’s not efficient. As the number of records increases, so does the effort necessary to find a given record. In computer science, we call that an O(n) problem.

But given a real phone book, we all know how to quickly locate anyone named Zawodny: flip to the Zs at the back of book and start there. Since the second letter is “a,” we know that any matches will be at or near the front of the list of all names starting with Z. The method used is based on knowledge of the data and how it is sorted.

That’s cheating, isn’t it? Not at all. The reason you can find the Zawodnys so quickly is that they’re sorted alphabetically by last name. So it’s easy to find them, provided you know your ABCs, of course.

Most technical books (like this one) provide an index at the back. It allows you to find the location of important terms and concepts quickly because they’re listed in sorted order along with the corresponding page numbers. Need to know where mysqlhotcopy is discussed? Just look up the page number in the index.

Database indexes are similar. Just as the book author or publisher may choose to create an index of the important concepts and terms in the book, you can choose to create an index on a particular column of a database table. Using the previous example, you might create an index on the last name to make looking up phone numbers faster:

ALTER TABLE phone_book ADD INDEX (last_name)

In doing so, you’re asking MySQL to create an ordered list of all the last names in the table. Along with each name, it notes the positions of the matching records—just as the index at the back of this book lists page numbers for each entry.[1]

From the database server’s point of view, indexes exist so that the database can quickly eliminate possible rows from the result set when executing a query. Without any indexes, MySQL (like any database server) must examine every row in a table. Not only is that time consuming, it uses a lot of disk I/O and can effectively pollute the disk cache.

In the real world, it’s rare to find dynamic data that just happens to be sorted (and stays sorted). Books are a special case; they tend to remain static.

Because MySQL needs to maintain a separate list of indexes’ values and keep them updated as your data changes, you really don’t want to index every column in a table. Indexes are a trade-off between space and time. You’re sacrificing some extra disk space and a bit of CPU overhead on each , , and query to make most (if not all) your queries much faster.

Much of the MySQL documentation uses the terms index and key interchangeably. Saying that is a key in the table is the same as saying that the field of the table is indexed.

Indexes trade space for performance. But sometimes you’d rather not trade too much space for the performance you’re after. Luckily, MySQL gives you a lot of control over how much space is used by the indexes. Maybe you have a table with 2 billion rows in it. Adding an index on will require a lot of space. If the average is 8 bytes long, you’re looking at roughly 16 GB of space for the data portion of the index; the row pointers are there no matter what you do, and they add another 4-8 bytes per record.[2]

Instead of indexing the entire last name, you might index only the first 4 bytes:

ALTER TABLE phone_book ADD INDEX (last_name(4))

In doing so, you’ve reduced the space requirements for the data portion of the index by roughly half. The trade-off is that MySQL can’t eliminate quite as many rows using this index. A query such as:

SELECT * FROM phone_book WHERE last_name = 'Smith'

retrieves all fields beginning with , including all people with name , , and so on. The query must then discard and all other irrelevant rows.

Like many relational database engines, MySQL allows you to create indexes that are composed of multiple columns:

ALTER TABLE phone_book ADD INDEX (last_name, first_name)

Such indexes can improve the query speed if you often query all columns together in the clause or if a single column doesn’t have sufficient variety. Of course, you can use partial indexes to reduce the space required:

ALTER TABLE phone_book ADD INDEX (last_name(4), first_name(4))

In either case, a query to find Josh Woodward executes quickly:

SELECT * FROM phone_book WHERE last_name = 'Woodward' AND first_name = 'Josh'

Having the last name and first name indexed together means that MySQL can eliminate rows based on both fields, thereby greatly reducing the number of rows it must consider. After all, there are a lot more people in the phone book whose last name starts with “Wood” than there are folks whose last name starts with “Wood” and whose first name also starts with “Josh.”

When discussing multicolumn indexes, you may see the individual indexed columns referred to as key parts or “parts of the key.” Multicolumn indexes are also referred to as composite indexes or compound indexes.

So why not just create two indexes, one on and one on ? You could do that, but MySQL won’t use them both at the same time. In fact, MySQL will only ever use one index per table per query—except for s.[3] This fact is important enough to say again: MySQL will only ever use one index per table per query.

With separate indexes on and , MySQL will choose one or the other. It does so by making an educated guess about which index allows it to match fewer rows. We call it an educated guess because MySQL keeps track of some index statistics that allow it to infer what the data looks like. The statistics, of course, are generalizations. While they often let MySQL make smart decisions, if you have very clumpy data, MySQL may make suboptimal choices about index use. We call data clumpy if the key being indexed is sparse in some areas (such as names beginning with X) and highly concentrated in others (such as the name in English-speaking countries). This is an important topic that we’ll revisit later in this book.

How does MySQL order values in the index? If you’ve used another RDBMS, you might expect MySQL to have syntax for specifying that an index be sorted in ascending, descending, or some other order. MySQL gives you no control over its internal sorting of index values. It has little reason to. As of Version 4.0, it does a good job of optimizing cases that cause slower performance for other database systems.

For example, some database products may execute this query quickly:

SELECT * FROM phone_book WHERE last_name = 'Zawodny' ORDER BY first_name DESC

And this query slowly:

SELECT * FROM phone_book WHERE last_name = 'Zawodny' ORDER BY first_name ASC

Why? Because some databases store the indexes in descending order and are optimized for reading them in that order. In the first case, the database uses the multicolumn index to locate all the matching records. Since the records are already stored in descending order, there’s no need to sort them. But in the second case, the server finds all matching records and then performs a second pass over those rows to sort them.

MySQL is smart enough to “traverse the index backwards” when necessary. It will execute both queries very quickly. In neither case does it need to sort the records.

Indexes aren’t always used to locate matching rows for a query. A unique index specifies that a particular value may only appear once in a given column.[4] In the phone book example, you might create a unique index on to ensure that each phone number appears only once: [5]

ALTER TABLE phone_book ADD UNIQUE (phone_number)

The unique index serves a dual purpose. It functions just like any other index when you perform a query based on a phone number:

SELECT * FROM phone_book WHERE phone_number = '555-7271'

However, it also checks every value when attempting to insert or update a record to ensure that the value doesn’t already exist. In this way, the unique index acts as a constraint.

Unique indexes use as much space as nonunique indexes do. The value of every column as well as the record’s location is stored. This can be a waste if you use the unique index as a constraint and never as an index. Put another way, you may rely on the unique index to enforce uniqueness but never write a query that uses the unique value. In this case, there’s no need for MySQL to store the locations of every record in the index: you’ll never use them.

Unfortunately, there’s no way to signal your intentions to MySQL. In the future, we’ll likely find a feature introduced for this specific case. The MyISAM storage engine already has support for unique columns without an index (it uses a hash-based system), but the mechanism isn’t exposed at the SQL level yet.

Clustered and secondary indexes

With MyISAM tables, the indexes are kept in a completely separate file that contains a list of primary (and possibly secondary) keys and a value that represents the byte offset for the record. These ensure MySQL can find and then quickly skip to that point within the database to locate the record. MySQL has to store the indexes this way because the records are stored in essentially random order.

With clustered indexes, the primary key and the record itself are “clustered” together, and the records are all stored in primary-key order. InnoDB uses clustered indexes. In the Oracle world, clustered indexes are known as "index-organized tables,” which may help you remember the relationship between the primary key and row ordering.

When your data is almost always searched on via its primary key, clustered indexes can make lookups incredibly fast. With a standard MyISAM index, there are two lookups, one to the index, and a second to the table itself via the location specified in the index. With clustered indexes, there’s a single lookup that points directly to the record in question.

Some operations render clustered indexes less effective. For instance, consider when a secondary index is in use. Going back to our phone book example, suppose you have set as the primary index and set as a secondary index, and you perform the following query:

SELECT * FROM phone_book WHERE phone_number = '555-7271'

MySQL scans the index to find the entry for , which contains the primary key entry because ’s primary index is the last name. MySQL then skips to the relevant entry in the database itself.

In other words, lookups based on your primary key happen exceedingly fast, and lookups based on secondary indexes happen at essentially the same speed as MyISAM index lookups would.

But under the right (or rather, the wrong) circumstances, the clustered index can actually degrade performance. When you use one together with a secondary index, you have to consider the combined impact on storage. Secondary indexes point to the primary key rather than the row. Therefore, if you index on a very large value and have several secondary indexes, you will end up with many duplicate copies of that primary index, first as the clustered index stored alongside the records themselves, but then again for as many times as you have secondary indexes pointing to those clustered indexes. With a small value as the primary key, this may not be so bad, but if you are using something potentially long, such as a URL, this repeated storage of the primary key on disk may cause storage issues.

Another less common but equally problematic condition happens when the data is altered such that the primary key is changed on a record. This is the most costly function of clustered indexes. A number of things can happen to make this operation a more severe performance hit:

  • Alter the record in question according to the query that was issued.

  • Determine the new primary key for that record, based on the altered data record.

  • Relocate the stored records so that the record in question is moved to the proper location in the tablespace.

  • Update any secondary indexes that point to that primary key.

As you might imagine, if you’re altering the primary key for a number of records, that command might take quite some time to do its job, especially on larger tables. Choose your primary keys wisely. Use values that are unlikely to change, such as a Social Security account number instead of a last name, serial number instead of a product name, and so on.

Unique indexes versus primary keys

If you’re coming from other relational databases, you might wonder what the difference between a primary key and a unique index is in MySQL. As usual, it depends. In MyISAM tables, there’s almost no difference. The only thing special about a primary key is that it can’t contain NULL values. The primary key is simply a named . MyISAM tables don’t require that you declare a primary key.

InnoDB and BDB tables require primary keys for every table. There’s no requirement that you specify one, however. If you don’t, the storage engine automatically adds a hidden primary key for you. In both cases, the primary keys are simply incrementing numeric values, similar to an column. If you decide to add your own primary key at a later time, simply use to add one. Both storage engines will discard their internally generated keys in favor of yours. Heap tables don’t require a primary key but will create one for you. In fact, you can create Heap tables with no indexes at all.

It is often difficult to remember that SQL uses tristate logic when performing logical operations. Unless a column is declared , there are three possible outcomes in a logical comparison. The comparison may be true because the values are equivalent; it may be false because the values aren’t equivalent; or it may not match because one of the values is NULL. Whenever one of the values is NULL, the outcome is also NULL.

Programmers often think of NULL as undefined or unknown. It’s a way of telling the database server “an unknown value goes here.” So how do NULL values affect indexes?

NULL values may be used in normal (nonunique) indexes. This is true of all database servers. However, unlike many database servers, MySQL allows you to use NULL values in unique indexes.[6] You can store as many NULL values as you’d like in such an index. This may seem a bit counterintuitive, but that’s the nature of NULL. Because NULL represents an undefined value, MySQL needs to assert that all NULL values are the same if it allowed only a single value in a unique index.

To make things just a bit more interesting, a NULL value may appear only once as a primary key. Why? The SQL standard dictates this behavior. It is one of the few ways in which primary keys are different from unique indexes in MySQL. And, in case you’re wondering, allowing NULL values in the index really doesn’t impact performance.

Having covered some of the basic ideas behind indexing, let’s turn to the various types (or structures) of indexes in MySQL. None of the index types are specific to MySQL. You’ll find similar indexes in PostgreSQL, DB2, Oracle, etc.

Rather than focus too much on the implementation details,[7] we’ll look at the types of data or applications each type was designed to handle and find answers to questions like these: Which index types are the fastest? Most flexible? Use the most or least space?

If this were a general-purpose textbook for a computer science class, we might delve deeper into the specific data structures and algorithms that are employed under the hood. Instead, we’ll try to limit our scope to the practical. If you’re especially curious about the under-the-hood magic, there are plenty of excellent computer science books available on the topic.

The B-tree, or balanced tree, is the most common types of index. Virtually all database servers and embedded database libraries offer B-tree indexes, often as the default index type. They are usually the default because of their unique combination of flexibility, size, and overall good performance.

As the name implies, a B-tree is a tree structure. The nodes are arranged in sorted order based on the key values. A B-tree is said to be balanced because it will never become lopsided as new nodes are added and removed. The main benefit of this balance is that the worst-case performance of a B-tree is always quite good. B-trees offer O(log n) performance for single-record lookups. Unlike binary trees, in which each node has at most two children, B-trees have many keys per node and don’t grow “tall” or “deep” as quickly as a binary tree.

B-tree indexes offer a lot of flexibility when you need to resolve queries. Range-base queries such as the following can be resolved very quickly:

SELECT * FROM phone_book WHERE last_name BETWEEN 'Marten' and 'Mason'

The server simply finds the first “Marten” record and the last “Mason” record. It then knows that everything in between are also matches. The same is true of virtually any query that involves understanding the range of values, including and and even an open-ended range query such as the following:

SELECT COUNT(*) FROM phone_book WHERE last_name > 'Zawodny'

MySQL will simply find the last Zawodny and count all the records beyond it in the index tree.

The second most popular indexes are hash-based. These hash indexes resemble a hash table rather than a tree. The structure is very flat compared to a tree. Rather than ordering index records based on a comparison of the key value with similar key values, hash indexes are based on the result of running each key through a hash function. The hash function’s job is to generate a semiunique hash value (usually numeric) for any given key. That value is then used to determine which bucket to put the key in.

Consider a common hashing function such as . Given similar strings as input, it produces wildly different results:

mysql> +----------------------------------+ | MD5('Smith') | +----------------------------------+ | e95f770ac4fb91ac2e4873e4b2dfc0e6 | +----------------------------------+ 1 row in set (0.46 sec) mysql> +----------------------------------+ | MD5('Smitty') | +----------------------------------+ | 6d6f09a116b2eded33b9c871e6797a47 | +----------------------------------+ 1 row in set (0.00 sec)

However, the MD5 algorithm produces 128-bit values (represented as base-64 by default), which means there are just over 3.4 × 1038 possible values. Because most computers don’t have nearly enough disk space (let alone memory) to contain that many slots, hash tables are always governed by the available storage space.

A common technique that reduces the possible key space of the hash table is to allocate a fixed number of buckets, often a relatively large prime number such as 35,149. You then divide the result of the hash function by the prime number and use the remainder to determine which bucket the value falls into.

That’s the theory. The implementation details, again, can be quite a bit more complex, and knowing them tends not to help much. The end result is that the hash index provides very fast lookups, generally O(1) unless you’re dealing with a hash function that doesn’t produce a good spread of values for your particular data.

While hash-based indexes generally provide some of the fastest key lookups, they are also less flexible and less predictable than other indexes. They’re less flexible because range-based queries can’t use the index. Good hash functions generate very different values for similar values, so the server can’t make any assumptions about the ordering of the data within the index structure. Records that are near each other in the hash table are rarely similar. Hash indexes are less predictable because the wrong combination of data and hash function can result in a hash table in which most of the records are clumped into just a few buckets. When that happens, performance suffers quite a bit. Rather than sifting through a relatively small list of keys that share the same hash value, the computer must examine a large list.

Hash indexes work relatively well for most text and numeric data types. Because hash functions effectively reduce arbitrarily sized keys to a small hash value, they tend not to use as much space as many tree-based indexes.

R-tree indexes are used for spatial or N-dimensional data. They are quite popular in mapping and geoscience applications but work equally well in other situations in which records are often queried based on two axes or dimensions: length and width, height and weight, etc.

Having been added for Version 4.1, R-tree indexes are relatively new to MySQL. MySQL’s implementation is based on the OpenGIS specifications, available online at http://www.opengis.org/. The spatial data support in other popular database servers is often based on the OpenGIS specifications, so the syntax should be familiar if you’ve similar products.

Spatial indexes may be unfamiliar to many long-time MySQL users, so let’s look at a simple example. We’ll create a table to contain spatial data, add several points using X, Y coordinates, and ask MySQL which points fall within the bounds of some polygons.

First, create the table with a small field to contain the spatial data:

mysql> -> ( -> -> -> -> Query OK, 0 rows affected (0.00 sec)

Then add some points:

mysql> Query OK, 1 row affected (0.00 sec) mysql> Query OK, 1 row affected (0.00 sec) mysql> Query OK, 1 row affected (0.00 sec)

Now, ensure that it looks right in the table:

mysql> select name, AsText(loc) from map_test; +---------+-------------+ | name | AsText(loc) | +---------+-------------+ | One Two | POINT(1 2) | | Two Two | POINT(2 2) | | Two One | POINT(2 1) | +---------+-------------+ 3 rows in set (0.00 sec)

Finally, ask MySQL which points fall within a polygon:

mysql> -> +---------+ | name | +---------+ | One Two | | Two Two | | Two One | +---------+ 3 rows in set (0.00 sec)

Figure 4-1 shows the points and polygon on a graph.

Figure 4-1. 2-D points and a polygon that contains them

MySQL indexes the various shapes that can be represented (points, lines, polygons) using the shape’s minimum bounding rectangle (MBR). To do so, it computes the smallest rectangle you can draw that completely contains the shape. MySQL stores the coordinates of that rectangle and uses them when trying to find shapes in a given area.

Now that we have discussed the common index types, terminology, and uses in relatively generic terms so far, let’s look at the indexes implemented in each of MySQL’s storage engines. Each engine implements a subset of the three index types we’ve looked at. They also provide different optimizations that you should be aware of.

MySQL’s default table type provides B-tree indexes, and as of Version 4.1.0, it provides R-tree indexes for spatial data. In addition to the standard benefits that come with a good B-tree implementation, MyISAM adds two other important but relatively unknown features prefix compression and packed keys.

Prefix compression is used to factor out common prefixes in string keys. In a table that stores URLs, it would be a waste of space for MySQL to store the “http://” in every node of the B-tree. Because it is common to large number of the keys, it will compress the common prefix so that it takes significantly less space.

Packed keys are best thought of as prefix compression for integer keys. Because integer keys are stored with their high bytes first, it’s common for a large group of keys to share a common prefix because the highest bits of the number change far less often. To enable packed keys, simply append:

PACK_KEYS = 1

to the CREATETABLE statement.

MySQL stores the indexes for a table in the table’s .MYI file.

One performance-enhancing feature of MyISAM tables is the ability to delay the writing of index data to disk. Normally, MySQL will flush modified key blocks to disk immediately after making changes to them, but you can override this behavior on a per-table basis or globally. Doing so provides a significant performance boost during heavy , , and activity.

MySQL’s tristate setting controls this behavior. The default, , means that MySQL will honor the option in . Setting it to means that MySQL will never delay key writes. And setting it to tells MySQL to delay key writes on all MyISAM tables regardless of the used when the table was created.

The downside of delayed key writes is that the indexes may be out of sync with the data if MySQL crashes and has unwritten data in its key buffer. A , which rebuilds all indexes and may consume a lot of time, is necessary to correct the problem.

MySQL’s only in-memory table type was originally built with support just for hash indexes. As of Version 4.1.0, however, you may choose between B-tree and hash indexes in Heap tables. The default is still to use a hash index, but specifying B-tree is simple:

mysql> -> name varchar(50) not null, -> index using btree (name) -> ) type = HEAP; Query OK, 0 rows affected (0.00 sec)

To verify that the index was created properly, use the SHOW KEYS command:

mysql> *************************** 1. row *************************** Table: heap_test Non_unique: 1 Key_name: name Seq_in_index: 1 Column_name: name Collation: A Cardinality: NULL Sub_part: NULL Packed: NULL Null: Index_type: BTREE Comment: 1 row in set (0.00 sec)

By combining the flexibility of B-tree indexes and the raw speed of an in-memory table, query performance of the temp tables is hard to beat. Of course, if all you need are fast single-key lookups, the default hash indexes in Heap tables will serve you well. They are lightning fast and very space efficient.

The index data for Heap tables is always stored in memory—just like the data.

MySQL’s Berkeley DB (BDB) tables provide only B-tree indexes. This may come as a surprise to long-time BDB users who may be familiar with its underlying hash-based indexes. The indexes are stored in the same file as the data itself.

BDB’s indexes, like those in MyISAM, also provide prefix compression. Like InnoDB, BDB also uses clustered indexes, and BDB tables require a primary key. If you don’t supply one, MySQL creates a hidden primary key it uses internally for locating rows. The requirement exists because BDB always uses the primary key to locate rows. Index entries always refer to rows using the primary key rather than the record’s physical location. This means that record lookups on secondary indexes are slightly slower then primary-key lookups.

InnoDB tables provide B-tree indexes. The indexes provide no packing or prefix compression. In addition, InnoDB also requires a primary key for each table. As with BDB, though, if you don’t provide a primary key, MySQL will supply a 64-bit value for you.

The indexes are stored in the InnoDB tablespace, just like the data and data dictionary (table definitions, etc.). Furthermore, InnoDB uses clustered indexes. That is, the primary key’s value directly affects the physical location of the row as well as its corresponding index node. Because of this, lookups based on primary key in InnoDB are very fast. Once the index node is found, the relevant records are likely to already be cached in InnoDB’s buffer pool.

A full-text index is a special type of index that can quickly retrieve the locations of every distinct word in a field. MySQL’s provides full-text indexing support in MyISAM tables. Full-text indexes are built against one or more text fields (, , etc.) in a table.

The full-text index is also stored in a table’s .MYI file. It is implemented by creating a normal two-part MyISAM B-tree index in which the first field is a , and the second is a . The first field contains the indexed word, and the is its local weight in the row.

Because they generally contain one record for each word in each indexed field, full-text indexes can get large rather quickly. Luckily, MySQL’s B-tree indexes are quite efficient, so space consumed by full-text is well worth the performance boost.

It’s not uncommon for a query like:

select * from articles where body = "%database%"

to run thousands of times faster when a full-text index is added and the query is re-written as:

select * from articles (body) match against ('database')

As with all index types, it’s a matter of trading space for speed.

There are many times when MySQL simply can’t use an index to satisfy a query. To help you recognize these limitations (and hopefully avoid them), let’s look at the four main impediments to using an index.

A query to locate all records that contain the word “buffy”:

select * from pages where page_text like "%buffy%"

is bound to be slow. It requires MySQL to scan every row in the table. And it won’t even find all occurrences, because “buffy” may be followed by some form of punctuation. The solution, of course, is to build a full-text index on the field and query using MySQL’s syntax.

When you’re dealing with partial words, however, things degenerate quickly. Imagine trying to find the phone number for everyone whose last name contains the string “son”, such as Johnson, Ansona, or Bronson. That query would look like this:

select phone_number from phone_book where last_name like "%son%"

That seems suspiciously similar to the “buffy” example, and it is. Because you are performing a wildcard search on the field, MySQL will need to read every row, but switching to a full-text index won’t help. Full-text indexes deal with complete words, so they’re of no help in this situation.

If that’s surprising, consider how you’d attempt to locate all those names in a normal phone book. Can you think of an efficient approach? There’s really no simple change that can be made to the printed phone book that will facilitate this type of query.

Using a regular expression has similar problems. Imagine trying to find all last names that end with either “ith,” such as Smith, or “son” as in Johnson. As any Perl hacker would tell you, that’s easy. Build a regular expression that looks something like .

Translating that into MySQL, you might write this query:

select last_name from phone_book where last_name rlike "(son|ith)$"

However, you’d find that it runs slowly, and it does so for the same reasons that wildcard searches are slow. There’s simply no generalized and efficient way to build an index that facilitates running arbitrary wildcard or regular-expression searches.

In this specific case, you can work around this limitation by storing reversed last names in a second field. Then you can reverse the sense of the search and use a query like this:

select last_name from phone_book where rev_last_name like "thi%" union select last_name from phone_book where rev_last_name like "nos%"

But that’s efficient only because you’re starting at the beginning of the string, which is really the end of the real string before it is reversed. Again, there’s no general solution to this problem.

Note that a regular expression still isn’t efficient in this case. You might be tempted to write this query:

select last_name from phone_book where rev_last_name rlike "^(thi|nos)"

You would be disappointed by its performance. The MySQL optimizer simply never tries to optimize regex-based queries.

Poor statistics or corruption

If MySQL’s internal index statistics become corrupted or otherwise incorrect (possibly as the result of a crash or accidental server shutdown), MySQL may begin to exhibit very strange behavior. If the statistics are simply wrong, you may find that it no longer uses an index for your query. Or it may use an index only some of the time.

What’s likely happened is that MySQL believes that the number of rows that match your query is so high that it would actually be more efficient to perform a full table scan. Because table scans are primarily sequential reads, they’re faster than reading a large percentage of the records using an index, which requires far more disk seeks.

If this happens (or you suspect it has), try the index repair and analysis commands explained in the “Index Maintenance” section later in this chapter.

Similarly, if a table actually does have too many rows that really do match your query, performance can be quite slow. How many rows are too many for MySQL? It depends. But a good rule of thumb is that when MySQL believes more than about 30% of the rows are likely matches, it will resort to a table scan rather than using the index. There are a few exceptions to this rule. You’ll find a more detailed discussion of this problem in Chapter 5.

Once you’re done adding and dropping indexes, and your application is running happily, you may wonder about any ongoing index maintenance and administrative tasks. The good news is that there’s no requirement that you do anything special, but there are a couple of things you may want to do from time to time.

Obtaining Index Information

If you’re ever asked to help debug a slow query or indexing problem against a table (or group of tables) that you haven’t seen in quite a while, you’ll need to recover some basic information. Which columns are indexed? How many values are there? How large is the index?

Luckily, MySQL makes it relatively easy to gather this information. By using , you can retrieve the complete SQL necessary to (re-)create the table. However, if you care only about indexes, provides a lot more information.

mysql> *************************** 1. row *************************** Table: access_jeremy_zawodny_com Non_unique: 1 Key_name: time_stamp Seq_in_index: 1 Column_name: time_stamp Collation: A Cardinality: 9434851 Sub_part: NULL Packed: NULL Null: YES Index_type: BTREE Comment: 1 rows in set (0.00 sec)

You may substitute for in the query.

The table in the example has a single index named . It is a B-tree index with only one component, the column (as opposed to a multicolumn index). The index isn’t packed and is allowed to contain NULL values. It’s a non-unique index, so duplicates are allowed.

Refreshing Index Statistics

Over time, a table that sees many changes is likely to develop some inefficiencies in its indexes. Fragmentation due to blocks moving around on disk and inaccurate index statistics are the two most common problems you’re likely to see. Luckily, it’s easy for MySQL to optimize index data for MyISAM tables.

You can use the command to reindex a table. In doing so, MySQL will reread all the records in the table and reconstruct all of its indexes. The result will be tightly packed indexes with good statistics available.

Keep in mind that reindexing the table can take quite a bit of time if the table is large. During that time, MySQL has a write lock on the table, so data can’t be updated.

Using the myisamchk command-line tool, you can perform the analysis offline:

$ database-name $ table-name

Just be sure that MySQL isn’t running when you try this, or you run the risk of corrupting your indexes.

BDB and InnoDB tables are less likely to need this sort of tuning. That’s a good thing, because the only ways to reindex them are a bit more time consuming. You can manually drop and re-create all the indexes, or you have to dump and reload the tables. However, using on an InnoDB table causes InnoDB to re-sample the data in an attempt to collect better statistics.

Источник: [https://torrent-igruha.org/3551-portal.html]
.

What’s New in the A.S.C. Version: 4.1 serial key or number?

Screen Shot

System Requirements for A.S.C. Version: 4.1 serial key or number

Add a Comment

Your email address will not be published. Required fields are marked *