MySQL 的索引 和 数据库优化

1.索引问题

索引是对数据库表中,一个或多个列的值进行排序的结构,建立索引有助于更快地获取信息。
MySQL有四种不同的索引类型:
1>.主键索引
2>.唯一索引
3>.普通索引
4>.全文索引(MyISAM 及 MySQL5.6以上的 InnoDB)

创建索引的标准语法

CREATE INDEX 索引名 ON 表名 (列名) TABLESPACE 表空间名; 

创建唯一索引

CREATE unique INDEX 索引名 ON 表名 (列名) TABLESPACE 表空间名; 

创建组合索引

CREATE INDEX 索引名 ON 表名 (列名1,列名2) TABLESPACE 表空间名; 

创建反向键索引

CREATE INDEX 索引名 ON 表名 (列名) reverse TABLESPACE 表空间名;

2.建立索引的目的是加快对表中记录的查找或排序,并非越多越好,因为创建索引是要付出代价的:

1>.增加了数据库的存储空间;
2>.在插入和修改数据时,要花费较多的时间维护索引。

3.编写 SQL 时就需要注意与索引相关的规则:

1>.MySQL不支持函数转换,所以字段前面不能加函数;
2>.不要在字段前面加减运算;
3>.like % 在前面用不到索引;
4>.不要 select *;
5>.or 的查询尽量用 union 代替(Innodb);
6>.order by / group by 字段包括在索引当中减少排序,效率会更高

4.数据库的优化

程序优化,尽量批量处理,避免逐条处理,减小IO
eg : insert into A (id,name) values (1,'Tom'),(2,'Bob'),(3,'Rose')

减少多表连接数,尽量少的表进行连接

表连接时,尽量用主键进行接连或用唯一索引

表的查询多时,一定建立索引

根据查询条件建立索引,如果查询条件不止一个,使用组合索引

    使用合适的索引,例如时间索引,哈希索引,聚簇索引

1.in(在where语句中规定多个值)替换or

2.union(合并多个select语句的结果集)替换or

3.Existssql返回结果为真)替换distinct(返回唯一不同的值也就是去重)

4.Not null 改为a>0a>””  (检验数据是否为null比较耗费数据库性能)

5.尽量多使用commit

6.避免使用select *

7.A>2改为A>=3

8.X5400%不用前置%(进行了全表扫描)

9.UNION ALL操作符替代UNION

10.可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.

11.Where子句替换HAVING子句

12.避免在索引列上使用计算

总结:

1.对查询进行优化,要尽量避免全局扫描  首先应考虑在where以及order by设计的列上建立索引

2.应尽量避免在where子句中,对字段进行null值判断,否则会导致引擎放弃使用索引,而进行全表扫描

3.尽量避免,在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,就会导致引擎对全表进行扫描。

4.In not in like  尽量避免,都会进行全表查询。

5.部分查询修改的 复杂语句尽量查分开来生成一些临时表再进行 关联操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值