1、为什么要写这个
需求推动技术学习得动力。
2、数据库优化方向
1) SQL语句和索引
2)数据表结构
3)系统配置
4)硬件
从上往下,成本由低到高。
3、根据索引优化
在说索引之前,先说下数据库是如何查数据库的,在这里以Sql Server为例
数据读取,分为:物理读取、逻辑读取、和预读取
预读取:根据数据库生成的查询计划,判断从物理磁盘中读取多少数据
物理读取:数据初始是存在磁盘中的,所以第一次读取数据,要将数据从磁盘中读到内存中。SQL Server 物理读取数据是按照页读取的,每页大概8KB
逻辑读取:就是从内存中根据条件筛选数据
如何理解索引:
理解索引的方式:就像我们查字典一样,索引就相当于字典的目录,我们可以根据拼音查询,或者根据偏旁查询
索引又分为:聚集索引 和 非聚集索引
聚集索引:何为聚集索引,就是具有物理性质的索引。此索引和数据顺序一致,而存到数据库表中的数据顺序只会有一个,所以聚集索引也只能有
一个。
非聚集索引:逻辑上的索引。对任一一个字段进行排序后的索引,所以该索引可以有多个。
使用索引的好处:就像查汉语字典一样 ,按照拼音查,或者偏旁查,会很快查到对应的字,所以就是查询效率就会快。
使用索引的缺点:当字典有目录的时候,字典就会变厚,变重,同样,数据库中的索引,也会占有空间,同时对数据的增加、删除和修改,效率会下降。
比如你要删除字典中的一个字,你既要删除这个字,又要更新目录,所以会影响,数据库增加、删除和更新的效率,有解决的办法,随后再说。
什么字段上创建索引
- 主键或者外键
- 关联表的字段上创建索引
- 被经常当作查询条件的字段
- 被当索引的字段的长度应该尽量小
什么时候用聚集索引或非聚集索引
场景 | 是否使用聚集索引 | 是否使用非聚集索引 |
---|---|---|
列经常被分组排序 | 是 | 是 |
返回某范围内的数据 | 是 | 否 |
频繁更新的列 | 否 | 是 |
主键列 | 是 | 是 |
外键列 | 是 | 否 |
以上内容仅供参考。
创建索引
通过语句进行创建
SQL Server 数据库下:
聚集索引:Create clustered index indexName on Table(columnName)
非聚集索引:Create noclustered index indexName on Table(columnName)
删除索引:drop index Table.indexName
通过UI创建
通过数据库引擎优化顾问协助创建索引
SQL Server 打开引擎优化顾问,设置相关配置,然后可以生成优化建议,包括分区建议,和索引建议。
以上内容主要是数据优化中,自己对索引作用,和创建的总结,下一篇,SQL优化。