前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python技术面试题(十四)--数据库索引

python技术面试题(十四)--数据库索引

作者头像
小闫同学啊
发布2019-07-18 15:36:34
4480
发布2019-07-18 15:36:34
举报
文章被收录于专栏:小闫笔记小闫笔记

正文共: 1888 字 5 图 预计阅读时间: 5 分钟

每日分享

You raise me up,so I can stand on mountains .You raise me up,to walk on stormy seas.

你激励了我故我能立足于群山之巅。你鼓舞了我,故我能行进于暴风雨的洋面。

小闫语录

激励能激发一个人的潜力,激励能抚慰一颗受伤的心,激励能鼓起失去的勇气。所以,正在看这篇文章的你,请开心每一天。得不到的是配不上你的,即将得到的一定是更好的。

MySQL数据库索引

数据库索引是什么大家应该都已经知道。为什么建立索引,大家应该张口就来。算了,我还是简简单单的说一下吧:

数据库索引可以理解为数据库中一种排序的数据结构。它的存在就是为了协助快速查询、更新数据库表中的数据。优化查询效率。(简直和废话一样,谁不知道索引就像新华字典前面的音节索引和部首检字表一样......)

那么索引的原理呢?什么时候创建索引呢?索引有哪些呢?这些你想过吗?不知道就对了,我也不知道(会不会被打死....)。

MySQL中的索引用到了B+树、哈希桶等索引数据结构,但是主流还是B+树。那么为什么B+树适合做数据库索引呢?

1.B+树使得IO读写次数变少。

B+树的内部结点并没有指向关键字具体信息的指针。因此其内部结点相对于B树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了。

2.B+树查询效率稳定。

搜索任何一个关键字,所走的路径长度是一样的,也就是说查每一个数据的效率相同。

3.B+树只需要遍历叶子节点(也就是最底层没有子节点的节点)就可以达到遍历整棵树的目的,这也解决了数据库的范围查询问题,而B数是不支持这样的操作的。

什么时候建立索引,什么时候少建或者不建索引呢?

1.表记录太少的话,不要建立索引了,因为建立索引表会增加查询的步骤,处理变慢;

2.经常插入、删除、修改的表尽量少的建立索引,因为索引表的维护也会降低性能;

3.对于那些数据都是重复且分布平均的字段,比如一个字段只有True和False两种数据,但是记录超多(假设100万行),这样建立索引是提高不了查询速度的;

4.不要将超多的字段建立在一个索引里,它会增加数据修改、插入和删除的时间的。

5.对于百万、千万级的数据库建立索引,相信我,它会有质的飞跃。

6.对于不会出现在where条件中的字段不要建立索引,不要再增加索引表的体积了。

1. 创建索引的语句

1.1 ALTER TABLE

1.创建普通的索引

代码语言:javascript
复制
alter table <table_name> add index <index_name> (`字段名`);

2.创建多个索引

代码语言:javascript
复制
alter table <table_name> add index <index_name> (`column`,`column1`,`column_N`.......);

索引名index_name是一个可选项,未指定时,MySQL将根据第一个索引列赋一个名称。

3.创建主键索引

代码语言:javascript
复制
alter table <table_name> add primary key (`字段名`);

4.创建唯一索引

代码语言:javascript
复制
alter table <table_name> add unique (`字段名`);

5.创建全文的索引

代码语言:javascript
复制
alter table <table_name> add fulltext (`字段名`);
1.2 CREATE INDEX

1.增加普通索引

代码语言:javascript
复制
create index <index_name> on table_name (`字段名`)

2.增加UNIQUE索引

代码语言:javascript
复制
create unique index <index_name> on <table_name> (`字段名`)

CREATE INDEX中索引名必须指定,而且只能增加普通索引和UNIQUE索引,不能增加PRIMARY KEY索引。

2. 删除索引

代码语言:javascript
复制
drop index <index_name> on <table_name>;
alter table <table_name> drop index <index_name>;
alter table <table_name> drop primary key;

优质文章推荐:

公众号使用指南

redis操作命令总结

前端中那些让你头疼的英文单词

Flask框架重点知识总结回顾

项目重点知识点详解

难点理解&面试题问答

flask框架中的一些常见问题

团队开发注意事项

浅谈密码加密

Django框架中的英文单词

Django中数据库的相关操作

DRF框架中的英文单词

重点内容回顾-DRF

Django相关知识点回顾

美多商城项目导航帖

项目重要技术点介绍

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈技术精选 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 每日分享
  • MySQL数据库索引
    • 1. 创建索引的语句
      • 1.1 ALTER TABLE
      • 1.2 CREATE INDEX
    • 2. 删除索引
    相关产品与服务
    云数据库 SQL Server
    腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档