データベースのインデックス、トランザクション

3475 ワード

インデックスの概要
インデックスはMySQLでは「キー」とも呼ばれ、ストレージエンジンがレコードをすばやく見つけるためのデータ構造です.インデックスは、特にテーブル内のデータ量がますます大きくなると、パフォーマンスに与えるインデックスの影響がますます重要になります.
インデックス最適化は、クエリーのパフォーマンス最適化に最も有効な手段であるはずです.インデックスは、クエリのパフォーマンスを数桁容易に向上させることができます.インデックスは辞書の音順表に相当し、ある字を調べる場合、音順表を使用しない場合は、数百ページからページごとに調べる必要があります.
インデックスの特徴:インデックスの作成と維持には多くの時間とディスク領域がかかりますが、クエリーの速度は大幅に向上します.
に索引構文
----テーブル作成時
--  :
    CREATE TABLE    (
                   1       [       …],
                   2       [       …],
                [UNIQUE | FULLTEXT | SPATIAL ]   INDEX | KEY
                [   ]  (   [(  )]  [ASC |DESC])
                );

----        :
    CREATE TABLE emp1 (
        id INT,
        name VARCHAR(30) ,
        resume VARCHAR(50),
        INDEX index_emp_name (name)
    ----KEY index_dept_name (dept_name)----
        );

----        :
    CREATE TABLE emp2 (
        id INT,
        name VARCHAR(30) ,
        bank_num CHAR(18) UNIQUE ,
        resume VARCHAR(50),
        UNIQUE INDEX index_emp_name (name)
        );

----        :
    CREATE TABLE emp3 (
        id INT,
        name VARCHAR(30) ,
        resume VARCHAR(50),
        FULLTEXT INDEX index_resume (resume)
        );


----        :
    CREATE TABLE emp4 (
        id INT,
        name VARCHAR(30) ,
        resume VARCHAR(50),
        INDEX index_name_resume (name, resume)
        );

-インデックスの追加----CREATE既存のテーブルにインデックスCREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX ON ( [( )] [ASC |DESC]) ;を作成
------ALTER TABLE既存のテーブルにインデックスを作成ALTER TABLE ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX ( [( )] [ASC |DESC]) ;
 CREATE INDEX index_emp_name on emp1(name);
 
 ALTER TABLE emp2 ADD UNIQUE INDEX index_bank_num(band_num);

-索引構文の削除:DROP INDEX索引名onテーブル名
DROP INDEX index_emp_name on emp1;
DROP INDEX bank_num on emp2;

さん索引しけん
--   
create table Indexdb.t1(id int,name varchar(20));


--    

delimiter $$
create procedure autoinsert() 
BEGIN
declare i int default 1;
while(i<500000)do
insert into Indexdb.t1 values(i,'yuan');
set i=i+1;
end while;
END$$

delimiter ;

--    
call autoinsert();

--       :
--      
   select * from Indexdb.t1 where id=300000;--0.32s
--      
   create index index_id on Indexdb.t1(id);
--      
   select * from Indexdb.t1 where id=300000;--0.00s

取引
トランザクションとは、論理的な操作のセットを指し、この操作の各ユニットを構成し、すべて成功したか、すべて成功しなかったかを指します.–start transactionトランザクションを開始–Rollbackトランザクションをロールバックします.すなわち、指定したsql文(insert delete update文のみロールバックできます)、前回のcommitの場所にロールバック–Commitトランザクションをロールバックします.保存されていないトランザクションをコミットします.savepoint保留ポイントをコミットします.トランザクションに設定された一時プレースホルダでロールバックを発行できます(トランザクション全体のロールバックとは異なります).
create table test2(id int PRIMARY KEY auto_increment,name VARCHAR(20)) engine=innodb;
INSERT INTO test2(name) VALUE ("alvin"),
                              ("yuan"),
                              ("xialv");



start transaction;
insert into test2 (name)values('silv');
select * from test2;
commit;


--    

start transaction;
insert into test2 (name)values('wu');
savepoint insert_wu;
select * from test2;



delete from test2 where id=4;
savepoint delete1;
select * from test2;


delete from test2 where id=1;
savepoint delete2;
select * from test2;

rollback to delete1;


select * from test2;

savepoint