sql的优化-索引
什么是索引?索引的定义是如何,在你的项目中用来了索引吗?
索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。索引是针对表而建立的,它是由数据页面以外的索引页面组成的,每个索引页面中的行都会含有逻辑指针,以便加速检索物理数据。
索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
定义:
分为普通索引, 唯一索引, 主键索引。
普通索引
创建索引,例如CREATE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表);
创建表的时候指定索引,例如CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) );
drop index <索引名>
唯一索引是不允许其中任何两行具有相同索引值的索引。
创建唯一索引的几种方式:
创建索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表);
创建表的时候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表) );
主索引,数据库表中一列或列组合(字段)的值唯一标识表中的每一行。该列称为表的主键。
项目中是否用到索引?
conut(*),该查询语句在表中有索引的情况下,会用到索引。SQL优化器在底层会查找索引或者主键count(pk_name),
所以在数据库中count(*)在有主键的情况下,速度会比没有主键的情况下快。
count(1)和count(*)的区别,
在没有索引或者主键的情况下, count(1)比count(*)要快, 应为count(*),此时会查找所有的列。
在有索引或者主键的情况下,count(1)和count(*)都一样快,都会查找索引。
在生产项目与门户项目集成时,用到了唯一性索引,unique index, 在集团编码列上用唯一性索引,此时主要提高查询速度。