数据库 索引

article/2025/10/22 10:32:54

多数数据库,使用 B 树(Balance Tree)的结构来保存索引。

B 树,
最上层节点:根节点
最下层节点:叶子节点
两者之间的节点:中间节点

B 树,显著特征:从根节点,到各个叶子节点的距离都是相等的。如此,检索任何值时,都经过相同数目的节点。

[sql]  view plain copy
  1. CREATE INDEX idx_lname_pinyin ON employee(lname_pinyin);  
  2. SHOW INDEX FROM employee\G  
  3. DROP INDEX idx_lname_pinyin ON employee;  

伴随主键的定义而创建的特别索引,被称为:丛生索引( Clustered Index
一个表,只有一个丛生索引。
普通的索引,在叶子节点中保存的是指向实际表的指针。
而,丛生索引,在叶子节点中保存的就是实际数据。
丛生索引,
不需要为保存索引,而使用专用的硬盘空间,节约资源
不需要检查索引后,再访问实际的表,提高了效率
创建丛生索引时,需要对表中数据进行排序,因此,在执行数据插入、更新、删除等操作时,比普通索引慢。


复合索引

[sql]  view plain copy
  1. CREATE INDEX idx_pinyin ON employee( lname_pinyin, fname_pinyin);  
  2.   
  3. SHOW INDEX FROM employee\G  


唯一性索引

使用 UNIQUE 关键字,来创建不可重复的索引,称为:唯一性索引。
对特定列创建唯一性索引,相当于对该列追加了唯一性制约。
创建唯一性索引的时候,如果对象列中,已经含有重复数据,则:创建失败,报错。
创建成功后,如果,插入重复数据,则:插入失败,报错。
指定多个列,来创建唯一性索引,只要,这些列的组合数据不重复,就可以创建成功。

[sql]  view plain copy
  1. CREATE UNIQUE INDEX idx_fname ON employee(fname);  
  2. CREATE UNIQUE INDEX idx_lname ON employee(lname);  
  3. CREATE UNIQUE INDEX idx_fullname ON employee(lname, fname);  


[sql]  view plain copy
  1. EXPLAIN SELECT * FROM employee WHERE lname_pinyin='wang'\G  

[sql]  view plain copy
  1. CREATE INDEX idx_lname_pinyin ON employee(lname_pinyin);  
  2. EXPLAIN SELECT * FROM employee WHERE lname_pinyin='wang'\G  

EXPLAIN 命令的说明:P100 表格


如果,创建索引后,遍历的次数与创建索引之前,变化不大。
说明,创建索引时,选择的列名不合理,需要选择合适的列重建索引。这是分析索引优劣的方法。

追加了索引后,也不能保证在每次检索时都会使用列索引。
如果, SQL 检索语句编写不当,就无法使用索引。
1、LIKE 运算符,进行模糊检索时,只能在前方一致的检索时,才能使用索引。
以下写法,索引不会被使用。
[sql]  view plain copy
  1. SELECT * FROM employee WHERE lname_pinyin LIKE '%w%';  
  2. SELECT * FROM employee WHERE lname_pinyin LIKE '%w';  

2、使用 IS NOT NULL 、 <> 的场合,也不会使用索引。如下:
[sql]  view plain copy
  1. SELECT * FROM employee WHERE lname_pinyin IS NOT NULL;  
  2. SELECT * FROM employee WHERE lname_pinyin <> 'wang';  

3、对列使用了运算或者函数的情况下,不会使用索引,如下:
[sql]  view plain copy
  1. SELECT * FROM employee WHERE YEAR(birth) = '1980'-- 不使用索引  
  2. SELECT * FROM employee WHERE birth >= '1980-01-01' AND birth <= '1980-12-31'--使用了索引  

4、复合索引的第一列,没有包含在 WHERE 条件语句中,如下:
[sql]  view plain copy
  1. CREATE INDEX idx_pinyin ON employee(lname_pinyin, fname_pinyin);  
  2. SELECT * FROM employee WHERE lname_pinyin = 'wang' AND fname_pinyin = 'xiao'--用了索引  
  3. SELECT * FROM employee WHERE lname_pinyin = 'wang'--用了索引  
  4.   
  5. SELECT * FROM employee WHERE fname_pinyin = 'xiao'-- 没有使用索引  
  6. SELECT * FROM employee WHERE lname_pinyin = 'wang' OR fname_pinyin = 'xiao'-- 没有使用索引  

实际开发过程中,需要积极使用 EXPLAIN 命令,来确认索引的使用情况,及时作相应修改。

http://chatgpt.dhexx.cn/article/YdhME2Sx.shtml

相关文章

mysql全库搜索关键字_数据库 全文检索

一、概述 MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提高匹配的速度。 二、语法 MATCH (col1,col2,...) AGAINST (expr [search_modifier]) search_modifier: { IN BOOLEAN MODE | WITH QUERY EXPANSION } 例如:SELECT * FROM tab_n…

人文社科类文献去哪些数据库检索下载

查找下载人文社科类文献的数据库大盘点&#xff1a; 1、文献党下载器&#xff08;wxdown.org&#xff09; 大型文献馆&#xff0c;几乎整合汇集了所有中外文献数据库资源&#xff0c;可附带权限进入文献数据库查找下载文献&#xff0c;覆盖全科包括查找下载人文社科类文献的众…

数据库索引的实现原理

强烈建议参阅链接:http://www.linezing.com/blog/?p=798#nav-1 说白了,索引问题就是一个查找问题。。。 数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。 在数据之外,数据库系统还维护着满足…

WoS数据库使用及检索示例

目录 快速了解一个领域的情况 1. 核心合集检索和所有数据库检索的区别 2. 检索结果分析 2.1 排序方式&#xff08;日期&#xff0c;被引频次&#xff09; 2.2 分析检索结果 2.3 精炼检索结果&#xff08;二次检索&#xff09; 2.4 创建引文报告 2.5 具体某一篇文献 快…

【MySQL】检索数据

每日鸡汤 &#xff1a; —— 若你困于无风之地&#xff0c;我将奏响高空之歌 要和我一起花 10 min 学一会 SQL 嘛&#xff1f; - 当然愿意&#xff0c;我美丽的小姐 &#xff08;封寝期间练就的自言自语能力越来越炉火纯青了~~~&#xff09; 前言&#xff1a; 本实验中所用数据…

数据库的检索(select)

今天我们学习一下数据库检索语句&#xff0c;由于经常用到&#xff0c;有需求的小伙伴欢迎来查看哦&#xff01; 一、简单的查询 --获取所以列 select * from T_table --获取部分列 select id, title from T_table 效果展示&#xff1a; 在...之间&#xff1a;Between.. a…

《MySQL必知必会》学习笔记之“数据库的检索”

文章目录 第一章 SQL与MySQL1 数据库基础2 什么是SQL3 客户机—服务器软件4 MySQL工具mysql命令行实用程序&#xff08;使用最多的实用程序之一&#xff09;MySQL AdministratorMySQL Query Browser 第二章 使用MySQL1 连接2选择数据库3了解数据库和表4 注释 第三章 检索数据1 …

最全最易理解的数据库查询教程

数据库查询 检索数据表中一个字段的内容检索数据表中多个字段的内容检索数据表中所有字段的内容带限制条件的查询表达式查询使用 WHERE 语句和逻辑表达式使用WHERE语句检索单范围数据使用WHERE语句检索双范围数据使用WHERE语句检索不匹配某条件的语句使用通配符[]模糊匹配数据内…

数据库基础知识——SELECT 语句(检索数据)

SQL使用 SQL&#xff08;发音为字母S-Q-L或sequel&#xff09;是结构化查询语言&#xff08;Structured Query Language&#xff09;的缩写。SQL是一种专门用来与数据库通信的语言。 SQL 语言特点&#xff1a; SQL 语言不区分大小写&#xff1b;在命令行窗口的 SQL 语句要以…

Python爬虫获取数据保存到数据库中(超级详细,保证一看就会)

1.简介介绍 -网络爬虫&#xff08;又称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在FOAF社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff0c;是一种按照一定的规则&#xff0c;自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动…

python数据爬取---简单页面的爬取

1、准备Requests和User Agent python中能实现爬虫功能的库有若干个&#xff0c;而最简单最容易上手的&#xff0c;要数Requests库&#xff0c;它是一个常用的http请求库&#xff0c;首先用pip install requests 进行安装才能使用。 User Agent一般翻译为用户代理&#xff0c;…

Python小姿势 - # 如何使用Python爬取网页数据

如何使用Python爬取网页数据 今天我们来学习一下如何使用Python来爬取网页数据。 首先&#xff0c;我们需要准备一个空白的文件&#xff0c;在文件中输入以下代码&#xff1a; import requests url http://www.baidu.com r requests.get(url) print(r.text) 上面的代码中&…

Python爬取数据

爬虫基本思路<通用> Response 服务器返回响应数据 Preview 预览 Payload 请求参数 Headers 头部信息&#xff1a;请求url地址、请求方式、响应头、请求头 一、数据来源分析 -抓包分析我们想要的数据内容&#xff0c;请求的那个网页 url地址得到。 -选中xhr 找到想要的内容…

手把手教会你用Python爬虫爬取网页数据!!

其实在当今社会&#xff0c;网络上充斥着大量有用的数据&#xff0c;我们只需要耐心的观察&#xff0c;再加上一些技术手段&#xff0c;就可以获取到大量的有价值数据。这里的“技术手段”就是网络爬虫。今天就给大家分享一篇爬虫基础知识和入门教程&#xff1a; 什么是爬虫&a…

python-爬取网站数据

一、安装jar 找到python解释解释器的安装根目录&#xff0c;执行以下命令&#xff0c; pip install requests #如果这个BeautifulSoup这个安装不上&#xff0c;可以换成pip install BeautifulSoup4试试 pip install BeautifulSoup二、肯定就是敲代码了 import urllib.reques…

Python爬虫入门教程!手把手教会你爬取网页数据

其实在当今社会&#xff0c;网络上充斥着大量有用的数据&#xff0c;我们只需要耐心的观察&#xff0c;再加上一些技术手段&#xff0c;就可以获取到大量的有价值数据。这里的“技术手段”就是网络爬虫。今天就给大家分享一篇爬虫基础知识和入门教程&#xff1a; 什么是爬虫?…

Python爬取整个网页的数据

本案例是基于PyCharm开发的&#xff0c;也可以使用idea。 在项目内新建一个python文件Test.py Test.py # 导入urllib下的request模块 import urllib.request # 导入正则匹配包 import re# -*- encoding:utf-8 -*- """ 作者&#xff1a;小思 文件名&#xff1a;…

python数据爬取及数据可视化分析

电影网站数据分析及可视化研究 本博客是一篇集数据爬取&#xff0c;存储为excel表格&#xff0c;将数据可视化为一体的博文&#xff0c;数据爬取采用request等方法&#xff0c;数据可视化会使用图表进行展示&#xff0c;有改进的地方还请大家多多指教。 目录 电影网站数据分析…

Python 爬取网页数据的两种方法

Python 爬取网页数据的两种方法 1. 概述2. 使用pandas 爬取网页数据2.1 打开网页2.2 打开 PyCharm 编译器 3.使用urllib爬取网页数据并写入Excel表3.1 下载 urllib 库3.2 代码如下3.3 运行结果如下 结束语 1. 概述 网络抓取是从任何网站或任何其他信息源中提取数据的过程&…

使用 Python 爬取网页数据

在需要过去一些网页上的信息的时候&#xff0c;使用 Python 写爬虫来爬取十分方便。 1. 使用 urllib.request 获取网页 urllib 是 Python 內建的 HTTP 库, 使用 urllib 可以只需要很简单的步骤就能高效采集数据; 配合 Beautiful 等 HTML 解析库, 可以编写出用于采集网络数据的…