首页 > 数据库 >数据库什么情况使用索引(附MYSQL示例)

数据库什么情况使用索引(附MYSQL示例)

时间:2024-06-18 19:33:27浏览次数:18  
标签:INDEX idx 示例 -- 查询 索引 MYSQL id SELECT

数据库什么情况使用索引

1. 提高查询性能

频繁查询的列

假设有一个用户表users,经常需要根据用户名查询用户信息:

CREATE INDEX idx_username ON users(username);

-- 查询
SELECT * FROM users WHERE username = 'john_doe';
排序操作

假设有一个订单表orders,经常需要按订单日期排序:

CREATE INDEX idx_order_date ON orders(order_date);

-- 查询
SELECT * FROM orders ORDER BY order_date DESC;
聚集操作

假设有一个销售表sales,经常需要按产品进行分组统计:

CREATE INDEX idx_product_id ON sales(product_id);

-- 查询
SELECT product_id, COUNT(*) FROM sales GROUP BY product_id;

2. 支持快速数据查找

唯一值查找

假设有一个主键为id的用户表users

CREATE UNIQUE INDEX idx_user_id ON users(id);

-- 查询
SELECT * FROM users WHERE id = 123;
范围查找

假设有一个订单表orders,需要查找某个时间范围内的订单:

CREATE INDEX idx_order_date ON orders(order_date);

-- 查询
SELECT * FROM orders WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31';

3. 联接操作

外键列

假设有两个表:orderscustomers,订单表orders有一个外键customer_id

CREATE INDEX idx_customer_id ON orders(customer_id);

-- 查询
SELECT * FROM orders o JOIN customers c ON o.customer_id = c.id;
联接列

假设有两个表:employeesdepartments,联接列为department_id

CREATE INDEX idx_department_id ON employees(department_id);

-- 查询
SELECT * FROM employees e JOIN departments d ON e.department_id = d.id;

4. 覆盖索引

假设有一个包含列column1column2column3的表example_table

CREATE INDEX idx_covering ON example_table(column3, column1, column2);

-- 查询
SELECT column1, column2 FROM example_table WHERE column3 = 'value';

5. 全文搜索

假设有一个包含文章内容的表articles,需要进行关键词搜索:

CREATE FULLTEXT INDEX idx_content ON articles(content);

-- 查询
SELECT * FROM articles WHERE MATCH(content) AGAINST ('search keyword');

6. 复合索引

假设有一个表products,需要基于category_idprice的组合查询:

CREATE INDEX idx_category_price ON products(category_id, price);

-- 查询
SELECT * FROM products WHERE category_id = 1 AND price < 100;

7. 频繁更新的列

假设有一个包含更新时间last_update的表records,尽量避免在此列上建立索引:

-- 可能会影响性能的索引,不建议在频繁更新的列上使用
CREATE INDEX idx_last_update ON records(last_update);

-- 查询
SELECT * FROM records WHERE last_update > '2023-01-01';

8. 空间索引

假设有一个包含地理位置数据的表locations,需要进行区域查询:

CREATE SPATIAL INDEX idx_location ON locations(coordinates);

-- 查询
SELECT * FROM locations WHERE ST_Contains(coordinates, ST_GeomFromText('POLYGON((...))'));

9. 哈希索引

假设有一个键值对存储的表kv_store,使用哈希索引进行等值查找:

CREATE INDEX idx_key USING HASH ON kv_store(key);

-- 查询
SELECT * FROM kv_store WHERE key = 'some_key';

以上示例展示了不同情况下如何创建和使用索引,以优化查询性能。通过这些示例,可以更好地理解在实际开发中如何运用索引来提升数据库的查询效率。

标签:INDEX,idx,示例,--,查询,索引,MYSQL,id,SELECT
From: https://blog.csdn.net/weixin_44046545/article/details/139666815

相关文章

  • 数据库回表及优化方法(附示例)
    数据库回表及优化方法什么是数据库回表如何优化回表1.使用覆盖索引示例:2.减少查询列示例:3.适当增加索引示例:4.优化查询语句示例:示例:优化回表的具体案例原始查询及索引:优化后的索引:总结作为一个程序员,了解数据库回表(RowBackLookup)及其优化方法对优化数据......
  • Linux 提权-MySQL UDF
    本文通过Google翻译MySQLUserDefinedFunctions–LinuxPrivilegeEscalation这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。导航0前言1什么是用户定义函数(UDF)?2枚举UDF漏洞利用条件2.1手动枚举UDF漏洞利用条件......
  • mysql的安装与环境配置(借鉴)
    (借鉴了csdn大佬:一个有灵魂的程序员的博客)一、文件下载首先去官网下载社区版压缩文件。官网地址:​​​​​​MySQL::DownloadMySQLCommunityServerhttps://dev.mysql.com/downloads/mysql/选择好相应的版本号和对应的操作系统,点击选中的文件下载。下载好的zip文件解压到......
  • mysql数据恢复
    全量备份恢复事件发生后停止后端服务,同时刷新数据库二进制日志,防止有新数据kill-9后端服务端口mysql-u-pflushlogs;刷新后的binlog的id为00004,需要恢复的数据都是00003mysql-uroot-psource/备份文件地址全量备份恢复完成,剩下的数据可根据binlog日志进行恢复增量......
  • 毕业设计:人事管理系统,基于java+springboot+mysql
     一、前言介绍          困扰管理层的许多问题当中,人事管理是一定不敢忽视的一块。但是管理好人事又面临很多麻烦需要解决,例如有几个方面:第一,公司往往员工人数都比较多,如何保证能够管理到每一员工;第二,如何在工作琐碎,记录繁多的情况下将人事变动的情况反应......
  • 揭秘In-Context Learning(ICL):大型语言模型如何通过上下文学习实现少样本高效推理[示
    揭秘In-ContextLearning(ICL):大型语言模型如何通过上下文学习实现少样本高效推理[示例设计、ICL机制详解]自GPT-3首次提出了In-ContextLearning(ICL)的概念而来,ICL目前已经变成了一种经典的LLMs使用方法。ICL,即In-ContextLearning,是一种让大型语言模型(LLMs)通过少量标注样本在......
  • MySQL触发器基本结构
    1、修改分隔符符号delimiter $$可以修改成$$//都行2、创建触发器函数名称createtrigger函数名3、什么样的操作触发,操作那个表after:....之后触发befor:....之前触发insert:插入被触发update:修改被触发delete:删除被触发on表名实例:在users表被添加信息后触发after......
  • MySQL触发器基本结构
    1、修改分隔符符号delimiter$$可以修改成$$//都行2、创建触发器函数名称createtrigger函数名3、什么样的操作触发,操作那个表after:....之后触发befor:....之前触发insert:插入被触发update:修改被触发delete:删除被触发on表名实例:在users表被添加信息后......
  • MySQL的下载安装教程
    Windows系统中下MySQL的安装教程一、下载安装包1.百度网盘下载链接:https://pan.baidu.com/s/19Oe42yh0j5XK6yboNv7qMQ 提取码:8888 2.从MySQL官网安装打开MySQL官网 下载并打开安装包,能看到版本是8.0.37,双击运行或者右键选择打开,打开后是一个安装向导,这个安装......
  • OB_MYSQL UPDATE 优化案例
    在工单系统上看到有一条SQL问题还没解决,直接联系这位同学看看是否需要帮忙。 慢SQL:UPDATEASETCORPORATION_NAME=(SELECTDISTINCTCORPORATION_NAMEFROM(SELECTCONTRACT_NO,COOP_SERVICE_TYPE,CORPORATION_NA......