1.索引
详细介绍:http://www.cnblogs.com/57rongjielong/p/8039452.html
索引是对数据库表中一个或多个列的值进行排序的结构。索引是经过某种算法优化过的,因而查找次数相对较少。
mysql的索引分为单列索引(主键索引,唯一索引,普通索引)和组合索引.
单列索引:一个索引只包含一个列,一个表可以有多个单列索引.
组合索引:一个组合索引包含两个或两个以上的列,
2.MySQL中常见索:
A.普通索引
1 CREATE TABLE person( 2 pid INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 3 pname VARCHAR(20) NOT NULL, 4 page INT, 5 -- 创建表时创建索引 6 INDEX index_pname(pname) 7 ) 8 9 -- 单独创建索引 10 -- create index 索引名称 on 表名(列名) 11 CREATE INDEX index_page ON person(page); 12 13 -- 删除索引 14 -- drop index 索引名称 on 表名; 15 DROP INDEX index_page ON person; 16 17 -- 查看索引 18 -- show index from 表名; 19 SHOW INDEX FROM person; 20 21 -- 对于创建索引时如果是BLOB 和 TEXT 类型,必须指定length
B.唯一索引
唯一性索引和普通索引最大的差异就是在索引列上增加了一层唯一约束。添加唯一性索引的数据列可以为空,但是只要存在数据值,就必须是唯一的。
1 CREATE TABLE person( 2 pid INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 3 pname VARCHAR(20) NOT NULL, 4 page INT, 5 -- 创建表时创建唯一索引 6 UNIQUE index_pname(pname) 7 ) 8 9 -- 单独创建索引 10 -- create index 索引名称 on 表名(列名) 11 CREATE UNIQUE INDEX index_page ON person(page); 12 13 -- 删除索引 14 -- drop index 索引名称 on 表名; 15 DROP INDEX index_page ON person; 16 17 -- 查看索引 18 -- show index from 表名; 19 SHOW INDEX FROM person; 20 21 -- 对于创建索引时如果是BLOB 和 TEXT 类型,必须指定length
C.主键索引
在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的。当在查询中使用主键索引时,它还允许快速访问数据。数据不能为空。
CREATE TABLE person( pid INT NOT NULL AUTO_INCREMENT PRIMARY KEY, pname VARCHAR(20) NOT NULL, page INT )
或
CREATE TABLE person( pid INT NOT NULL AUTO_INCREMENT, pname VARCHAR(20) NOT NULL, page INT, PRIMARY KEY(pid) )
CREATE TABLE person( pid INT NOT NULL, pname VARCHAR(20) NOT NULL, page INT ) -- 添加主键索引 ALTER TABLE person ADD PRIMARY KEY(pid); -- 删除主键 ALTER TABLE person DROP PRIMARY KEY; ALTER TABLE person MODIFY pid INT,DROP PRIMARY KEY;
D.组合索引
——两列或者多列组合成一个索引进行查询,频繁的同时使用n列来进行查询
CREATE INDEX ix_pid_pname ON person(pid,pname);
- pid and pname-- 使用索引
- pid -- 使用索引
- pname -- 不使用索引
注意:
避免使用
select
*
count
(1)或
count
(列) 代替
count
(*)
创建表时尽量使用
char
代替
varchar
表的字段顺序固定长度的字段优先
组合索引代替多个单列索引(经常使用多个条件查询时)
尽量使用短索引
使用连接(
JOIN
)来代替子查询(Sub-Queries)
连表时注意条件类型需一致
索引散列值(重复少)不适合建索引,例:性别不适合
3.limit分页
select * from 表 limit 5; - 前5行 select * from 表 limit 4,5; - 从第4行开始的5行 select * from 表 limit 5 offset 4 - 从第4行开始的5行