mysql的存储引擎,常用的有innodb和myisam
innodb支持外键,事务,行锁,安全性更高,写入快查询慢,适合大数据量
myisam查询快写入慢,支持全文索引,表锁(MyISAM同一个表上的读锁和写锁是互斥的,容易阻塞),
(myisam一个table实际保存为三个文件,.frm存储表定义,.MYD存储数据,.MYI存储索引)
(表锁是把整个表锁住,不能写,行锁只是锁住一行,这样安全性更高,,InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的)
还有heap 存在于内存的临时表
mysql的索引有
primary主键索引 唯一且不能为空
index索引 普通的(CREATE INDEX索引的名字 ON tablename (列名1,列名2,...);)
unique唯一索引 不允许有重复(CREATE UNIQUE INDEX索引的名字 ON tablename (列的列表);)
fulltext 全文索引 用于在一大串文本中进行搜索,(不支持中文分词,CREATE fulltext INDEX index_name ON table_name(colum_name);)
复合索引 可在多个字段上建立索引,比如INDEX(A, B, C)可以当做A或(A, B)的索引来使用,但不能当做B、C或(B, C)的索引来使用
举个例子来说,比如你在为某商场做一个会员卡的系统。
这个系统有一个会员表
有下列字段:
会员编号 INT
会员姓名 VARCHAR(10)
会员身份证号码 VARCHAR(18)
会员电话 VARCHAR(10)
会员住址 VARCHAR(50)
会员备注信息 TEXT
那么这个 会员编号,作为主键,使用 PRIMARY
会员姓名 如果要建索引的话,那么就是普通的 INDEX
会员身份证号码 如果要建索引的话,那么可以选择 UNIQUE (唯一的,不允许重复)
会员备注信息 , 如果需要建索引的话,可以选择 FULLTEXT,全文搜索。
不过 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。
用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以