以下のテーブルはi1 char(10)の列に `i1` (`i1`(3))と文字数を3文字に制限したインデックスを
作成してある。最初の3文字でデータが比較出来るようなSELECT文を実行した場合
参照するIndexのデータ量も少なくパフォーマンスが向上する。
但し、対外は色々なアプリケーションから一つのテーブルを参照する事が殆どだと思いますので
あまり利用する頻度は高くありません。列にNOT NULLを常に設定するなどと心がけて対応
する方が実際の運用では全体的なパフォーマンスを向上してくれるかと思います。


CREATE TABLE `fastindex` (
`i1` char(10) NOT NULL default '',
`i2` char(10) NOT NULL default '',
KEY `i1` (`i1`(3)),
KEY `i2` (`i2`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

show_index_char

SELECT i1 FROM fastindex WHERE i1 LIKE 'abc%';
SELECT i2 FROM fastindex WHERE i2 LIKE 'abc%';

以下のEXPLAINではデータが殆ど入っていないので、PLANは変わりませんが
i1のインデックスは最初の3文字のみを利用して作成されているので、上記のSELECT
を実行した場合「WHERE i1 LIKE ‘abc%’;」の方が実行が早い。
index_fast

—————————————————————————————————————-
Indexing cannot only help speed up SELECT queries, but it can also improve
UPDATE and DELETE statements. This is because indexing can help the
server

    find the rows more quickly that should be updated or deleted

.
On the other hand, indexes will slow down UPDATE and DELETE statements because
not only the original data have to be updated but also the indexes.
—————————————————————————————————————-

WHERE, ORDER BY, GROUP BYを利用しない場合やデータの種類が少ない場合は
INDEXを付けてもパフォーマンスが向上する事は殆どありません。INSERT、DELETE、
UPDATEなどの処理でINDEXの更新も入るので遅くなる場合が考えられます。
インデックスが実際に利用されるかどうか常にイメージしながらINDEXを作成するように
心がけると良いかも知れません。

    以下のテーブルはName列に5文字を利用したIndexを付与してあります。


CREATE TABLE `City` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Name` char(35) NOT NULL DEFAULT '',
`CountryCode` char(3) NOT NULL DEFAULT '',
`District` char(20) NOT NULL DEFAULT '',
`Population` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`),
KEY `idx_City_Name` (`Name`(5))
) ENGINE=MyISAM AUTO_INCREMENT=4083 DEFAULT CHARSET=utf8;

index_on_city

後からインデックスを追加する場合は、以下のようなコマンドを実行すれば良い。
——————————
mysql> CREATE INDEX Name ON City(Name(5));
mysql> ALTER TABLE City ADD INDEX(Name(5));

データのINSERT処理を早くするには?
————————————————————————————————————————-
You could use multiple-row inserts, rather than single-row inserts.
LOAD DATA INFILE will run even faster than any INSERT statement that inserts the
same amount of rows. For InnoDB tables, you could group inserts within a transaction
so that InnoDB will flush changes only when the transaction ends,
rather than after every single INSERT statement. If you’re planning to replace rows using
DELETE and INSERT, you could as well use the MySQL extension REPLACE that runs faster.

For a multiple-row INSERT statementでエラーが起きた場合………….
■ MyISAM では, エラーが起きるまでデータがINSERTされます。
■ InnoDBでは, Rolls backが起きてデータが一見もINSERTされずテーブルはEmptyのままになります。


【MYSQLのインストール】

※ perl-DBIが無いとエラーになる場合があるので,予めインストールしておくと良い。

DBI
http://dev.mysql.com/downloads/dbi.html

———–① ユーザーの追加——————

[root@localhost ~]# groupadd mysql
[root@localhost ~]# adduser -g mysql -d /home/mysql mysql
[root@localhost ~]#

———–② ソースファイルのダウンロード——————

URL: http://dev.mysql.com/downloads/mysql/5.0.html#Source

wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.45.tar.gz/from/http://mirror.mysql-partners-jp.biz/

 ———–③ ソースファイルの解凍——————

[root@localhost postsource]# tar zxvf mysql-5.0.45.tar.gz

 ———–④ configureコマンドで設定——————(UTF8に文字コード設定,ホームディレクトリー,データディレクトリ等指定)

[root@localhost mysql-5.0.45]# ./configure –prefix=/usr/local/mysql –localstatedir=/home/mysql/data –with-charset=utf8 -with-extra-charsets=all –with-mysqld-user=mysql
checking build system type… i686-pc-linux-gnu
checking host system type… i686-pc-linux-gnu
…………………………………..省略……………………………..
MySQL has a Web site at http://www.mysql.com/ which carries details on the
latest release, upcoming features, and other information to make your
work or play with MySQL more productive. There you can also find
information about mailing lists for MySQL discussion.
Remember to check the platform specific part of the reference manual for
hints about installing MySQL on your platform. Also have a look at the
files in the Docs directory.
Thank you for choosing MySQL!

 ———–⑤ コンパイル——————

[root@localhost mysql-5.0.45]#make

………………………..省略………………コンパイル中……………..

make[3]: `all-am’ に対して行うべき事はありません.
make[3]: ディレクトリ `/home/admin/postsource/mysql-5.0.45/server-tools’ から出ます
make[2]: ディレクトリ `/home/admin/postsource/mysql-5.0.45/server-tools’ から出ます
make[1]: ディレクトリ `/home/admin/postsource/mysql-5.0.45′ から出ます

 ———–⑥ インストール開始——————

[root@localhost mysql-5.0.45]# make install
make  install-recursive
make[1]: ディレクトリ `/home/admin/postsource/mysql-5.0.45′ に入ります
Making install in .
make[2]: ディレクトリ `/home/admin/postsource/mysql-5.0.45′ に入ります
make[3]: ディレクトリ `/home/admin/postsource/mysql-5.0.45′ に入ります

省略………………インストール中……………..

make[4]: ディレクトリ `/home/admin/postsource/mysql-5.0.45/server-tools’ から出ます
make[3]: ディレクトリ `/home/admin/postsource/mysql-5.0.45/server-tools’ から出ます
make[2]: ディレクトリ `/home/admin/postsource/mysql-5.0.45/server-tools’ から出ます
make[1]: ディレクトリ `/home/admin/postsource/mysql-5.0.45′ から出ます
[root@localhost mysql-5.0.45]#

 

————————————————-基本インストール完了———————————————-

インストール後のDBの初期設定

 ————①データベースを初期化—————–

[root@localhost data]#  /usr/local/mysql/bin/mysql_install_db –user=mysql
Installing MySQL system tables…
OK
Filling help tables…
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/local/mysql/bin/mysqladmin -u root password ‘new-password’
/usr/local/mysql/bin/mysqladmin -u root -h localhost.localdomain password ‘new-password’
See the manual for more instructions.
You can start the MySQL daemon with:
cd /usr/local/mysql ; /usr/local/mysql/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/local/mysql/bin/mysqlbug script!

The latest information about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at http://shop.mysql.com
[root@localhost data]#

 

 ————②データディレクトリーオーナーをmysqlユーザーに変更-(chmod可)—————-
[root@localhost mysql]# chown -R mysql /home/mysql/data
[root@localhost mysql]# chgrp -R mysql /home/mysql/data
[root@localhost mysql]# ls -l
合計 8
drwxr-xr-x 4 mysql mysql 4096 10月  8 01:36 data
[root@localhost mysql]#

 

————③MYSQLをバックグラウンドで起動します。—————–
[root@localhost mysql]# /usr/local/mysql/bin/mysqld_safe –user=mysql &
[1] 23960
[root@localhost mysql]# Starting mysqld daemon with databases from /home/mysql/data

 

————④rootユーザーのパスワードを作成しておく。—————–

/usr/local/mysql/bin/mysqladmin -u root password ‘password’

 

————⑤起動時に自動的に起動の設定—————–

[root@localhost mysql]# cp /home/admin/postsource/mysql-5.0.45/support-files/mysql.server /etc/init.d/mysql
[root@localhost mysql]# vi /etc/init.d/mysql     <————起動ファイルの編集

[root@localhost mysql]# /etc/init.d/mysql restart   <————再起動の確認
Shutting down MySQL..STOPPING server from pid file /home/mysql/data/localhost.localdomain.pid
071008 01:55:02  mysqld ended
                                                                    [  OK  ]
Starting MySQL                                             [  OK  ]
[1]+  Done                    /usr/local/mysql/bin/mysqld_safe –user=mysql
[root@localhost mysql]#

[root@localhost mysql]# chkconfig mysql on  <——/etc/rc2.d/に自動起動シンボリックリンク自動作成
[root@localhost mysql]# chkconfig –list mysql
mysql           0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@localhost mysql]#

 

————⑥my.cnfを自分のシステム用に最適化する—————–

[root@localhost support-files]# pwd
/home/admin/postsource/mysql-5.0.45/support-files
[root@localhost support-files]# cp my-medium.cnf /etc/my.cnf

 

mysqlinstall.jpg