介绍:
在关系数据库中,如果有上万甚至上亿条记录,在查找记录的时候,想要获得非常快的速度,就需要使用索引。索引是关系数据库中对某一列或多个列的值进行预排序的数据结构。通过使用索引,可以让数据库系统不必扫描整个表,而是直接定位到符合条件的记录,这样就大大加快了查询速度。
- 通过对数据库表创建索引,可以提高查询速度。
- 通过创建唯一索引,可以保证某一列的值具有唯一性。
- 数据库索引对于用户和应用程序来说都是透明的。
知识点:
- Mysql更新记录的时候,查询条件如果带索引,是行锁;否则,是表锁。
- Mysql在更新某条记录的同时,是可以同时查询这条记录的。MVCC(多版本并发控制)。
- Sql语句,* 切记不可用。
- Clustered index: clustered index is a type of index which sorts the data rows in the table on their key values.In the Database, there is only one clustered index per table.
- Non-clustered index: A Non-clustered index stores the data at one location and indices at another location. The index contains pointers to the location of that data. A single table can have many non-clustered indexes as an index in the non-clustered index is stored in different places.
- Sqlserver和mysql处理数据库死锁的方案差不多,都是主动关掉一个事务权重小的事务。事务权重一般是通过执行事务中的语句插入、更新、删除语句影响数据条数得出的,事务语句影响数据条数越小,该事务权重越低。
- jps、jstack定位死锁。
- Sql语句写的不要过于复杂,有几率产生死锁。
- Sqlserver索引碎片,当对索引所在的基础数据表进行修改时(包括插入、删除和更新等操作),会导致索引碎片的产生;定时的由DBA执行对应的脚本,来优化。
Mysql索引:
- B+树索引。
- 全文索引。
- 哈希索引。
索引结构:
- 二叉查找树:解决了排序的基本问题,但是由于无法保证平衡,可能退化为链表。
- 平衡二叉树:通过旋转解决了平衡的问题,但是旋转操作效率太低。
- 红黑树:通过舍弃严格的平衡和引入红黑节点,解决了AⅥ旋转效率过低的问题,但是在磁盘等场景下,树仍然太高,IO次数太多。
+B树:通过将二叉树改为多路平衡查找树,解决了树过高的问题。 - B+树:在B树的基础上,将非叶节点改造为不存储数据的纯索引节点,进一步降低了树的高度;此外将叶节点使用指针连接成链表,范围查询更加高效。
总结:
三人行,必有我师,要善于学习别人优秀的地方。
网友评论