 |

You can get better performance on a table and minimize storage space
using the techniques listed below:
-
Declare columns to be
NOT NULL if possible. It makes everything faster
and you save one bit per column.
-
Take advantage of the fact that all columns have default values. Insert
values explicitly only when the value to be inserted differs from the default.
You don't have to insert a value into the first
TIMESTAMP column or
into an AUTO_INCREMENT column in an INSERT statement.
mysql_insert_id().
-
Use the smaller integer types if possible to get smaller tables. For example,
MEDIUMINT is often better than INT.
-
If you don't have any variable-length columns (
VARCHAR, TEXT or
BLOB columns), a fixed-size record format is used. This is much faster
but unfortunately may waste some space.
10.17 What are the different row formats? Or, when should VARCHAR/CHAR be used?.
-
To help MySQL optimize queries better, run
isamchk --analyze
on a table after it has been loaded with relevant data. This updates a
value for each index that indicates the average number of rows that have the
same value. (For unique indexes, this is always 1, of course.)
-
To sort an index and data according to an index, use
isamchk --sort-index --sort-records=1
(if you want to sort on index 1). If you have a unique index from which you
want to read all records in order according to that index, this is a good way
to make that faster. Note however that this sorting isn't written optimally
and will take a long time for a large table!
-
For
INSERT statements, use multiple value lists if possible. This
is much faster than using separate INSERT statements.
-
When loading a table with data, use
LOAD DATA INFILE. This is usually
20 times faster than using a lot of INSERT statements.
LOAD DATA.
You can even get more speed when loading data into a table with many indexes
using the following procedure:
-
Create the table in
mysql or Perl with CREATE TABLE.
-
Execute
mysqladmin flush-tables.
-
Use
isamchk --keys-used=0 -rq /path/to/db/tbl_name. This will remove all
usage of all indexes from the table.
-
Insert data into the table with
LOAD DATA INFILE.
-
If you have
pack_isam and want to compress the table, run
pack_isam on it.
-
Recreate the indexes with
isamchk -r -q /path/to/db/tbl_name.
-
Execute
mysqladmin flush-tables.
-
To get some more speed for both
LOAD DATA INFILE and
INSERT, enlarge the key buffer. This can be done with the
-O key_buffer=# option to mysqld or safe_mysqld. For
example, 16M should be a good value if you have much RAM. :)
-
When dumping data as text files for use by other programs, use
SELECT ... INTO OUTFILE. LOAD DATA.
-
When doing many successive inserts or updates, you can get more speed by
locking your tables using
LOCK TABLES. LOAD DATA INFILE and
SELECT ...INTO OUTFILE are atomic, so you don't have to use LOCK
TABLES when using them.
LOCK TABLES.
To check how fragmented your tables are, run isamchk -evi on the
`.ISM' file.
13 Maintaining a MySQL installation.
|