您的位置:首页 > 数据库 > MySQL

MySQL 的索引 和 数据库优化

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

[b]创建索引的标准语法: CREATE INDEX 索引名 ON 表名 (列名) TABLESPACE 表空间名; 创建唯一索引: CREATE unique INDEX 索引名 ON 表名 (列名) TABLESPACE 表空间名; 创建组合索引: CREATE INDEX 索引名 ON 表名 (列名1,列名2) TABLESPACE 表空间名; 创建反向键索引: CREATE INDEX 索引名 ON 表名 (列名) reverse TABLESPACE 表空间名;[/b]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语句中规定多个值)替换or2.union(合并多个select语句的结果集)替换or3.Exists(sql返回结果为真)替换distinct(返回唯一不同的值也就是去重)4.Not null 改为a>0或a>””  (检验数据是否为null比较耗费数据库性能)5.尽量多使用commit6.避免使用select *
7.A>2改为A>=38.X5400%不用前置%(进行了全表扫描)9.UNION ALL操作符替代UNION10.可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.11.用Where子句替换HAVING子句12.避免在索引列上使用计算总结:1.对查询进行优化,要尽量避免全局扫描  首先应考虑在where以及order by设计的列上建立索引2.应尽量避免在where子句中,对字段进行null值判断,否则会导致引擎放弃使用索引,而进行全表扫描3.尽量避免,在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,就会导致引擎对全表进行扫描。4.In 、not in 、like  尽量避免,都会进行全表查询。5.部分查询修改的 复杂语句尽量查分开来生成一些临时表再进行 关联操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: