sql 语句优化
常用的sql优化建议:
- 避免使用
SELECT *
- 避免在
WHERE
后面使用 <> 或者 != 操作符 - 避免全表扫描
- 用
UNINO
代替OR
(UNINO速度快) -
LIKE
语句避免前置%查询LIKE %张
- 避免在WHERE 后使用表达式操作 或者使用参数
- 用exists 代替in
- 用varchar 代替char
索引优化:
- 索引分类:
- 普通索引
INDEX
允许在定义索引的列中插入重复值和空值 - 唯一索引
UNIQUE INDEX
不允许在定义索引的列中有重复的值,允许有空值 - 主键索引
PRIMARY KEY(id)
在定义主键索引的列要求唯一且非空 - 组合索引
INDEX MultiIdx(id,name,age) - 全文索引
FULLTEXT INDEX FullTxtIdx(info) - 空间索引
SPATIAL INDEX spatIdx(g)
注意:全文索引和空间索引只用在MyISAM引擎上才可以使用
空间索引的列必须为 NOT NULL 非空
对数据库的使用详情可以使用explain sql语句 可以查看SQL语句优化的情况
B--Tree(查询使用的索引):
B-Tree 索引,它是目前关系型数据库中查找数据最为常用和有效的索引,大多数存储引擎都支持这种索引。
InnoDB 聚簇索引(d clustered index ):
InnoDB采取的方式是:将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位,InnoDB中页的大小一般为 16 KB,也就是说,当需要从磁盘中读数据时每一次最少将从磁盘中读取16KB的内容到内存中,每一次最少也会把内存中的16KB内容写到磁盘中。
字符串类型不宜建立聚簇索引。且一个表只有一个InnoDB聚簇索引。
索引的优点和缺点:
优点:
- 大大的提升了查询速度。
缺点:
- 创建索引索引要耗费时间
- 索引会占用数据库空间
索引使用原则:
- 重复数据多的列不适合使用索引(SQL 是根据表中数据来进行查询优化的)
- 索引不是越多越好(索引会提高select的查询速率同时也会降低insert update 的速率)
- 避免更新聚簇索引数据列(聚簇索引<clustered> 一般是主键使用的,更改可能导致表记录重排)
- 数据量小的不需要使用索引
- 数据经常更改的列不要使用索引