当前位置: 首页 > news >正文

mysql 索引使用教程

1.什么索引

  索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的位置信息。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度.

2.索引工作原理

  除了词典,生活中随处可见索引的例子,如火车站的车次表、图书的目录等。它们的原理都是一样的,通过不断的缩小想要获得数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是我们总是通过同一种查找方式来锁定数据。

  数据库也是一样,但显然要复杂许多,因为不仅面临着等值查询,还有范围查询(>、<、between、in)、模糊查询(like)、并集查询(or)等等。数据库应该选择怎么样的方式来应对所有的问题呢?我们回想字典的例子,能不能把数据分成段,然后分段查询呢?最简单的如果1000条数据,1到100分成第一段,101到200分成第二段,201到300分成第三段……这样查第250条数据,只要找第三段就可以了,一下子去除了90%的无效数据。

 

3.查看一个表中是否已经创建索引

show index from 表名;

4.创建索引(如果指定字段是字符串,需要指定长度,建议长度与定义字段时的长度一致,字段类型如果不是字符串,可以不填写长度部分)

create index 索引名 on 数据表(字段名称长度)

5.删除索引

drop index 索引名称 on 数据表

6.测试数据表是否能加快查询速度

6.1创建一个数据表

create table my_index(title varchar(10));

6.2 插入数据

from pymysql import connect

def main():
    # 创建Connection连接
    conn = connect(host='localhost',port=3306,database='python_test_1',user='root',password='xu666666',charset='utf8')
    # 获得Cursor对象
    cursor = conn.cursor()
    # 插入10万次数据
    for i in range(100000):
        cursor.execute("insert into my_index values('ha-%d')" % i)
    # 提交数据
    conn.commit()

if __name__ == "__main__":
    main()

6.3 开始查询并启动时间检测

  • 开启运行时间监测:
set profiling=1;
  • 查找第1万条数据ha-99999
select * from my_index where title='ha-99999';
  • 查看执行的时间:
show profiles;
  • 为表title_index的title列创建索引:
create index test_index on my_index(title(10));
  • 执行查询语句:
select * from my_index where title='ha-99999';
  • 再次查看执行的时间
show profiles;

6.4 测试结果

      

 

注意

  1.索引可以明显提高某些字段的查询效率,但不能加快插入,更新,删除数据的效率,相反由于每次数据表数据的更改都会让索引重新排列,会降低效率

  2.要注意的是,建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索引文件。对于一个经常需要更新和插入的表格,就没有必要为一个很少使用的where字句单独建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。建立索引会占用磁盘空间。

    3. 建立索引要创建在常用的查询字段上,并且根据自己的需求建立说因数量

 

转载于:https://www.cnblogs.com/xuchuankun/p/9451495.html

相关文章:

  • C#操作MongoDB
  • 分页器(自定制)
  • [转]Linux下防止进程使用swap及防止OOM机制导致进程被kill掉
  • springMVC集成activiti-explorer5.22(一)
  • freebsd为网卡设置别名
  • KVM命令集管理虚拟机
  • ORA-38301:can not perform DDL/DML Over Object in Recycle Bin 11.2.0.4
  • 实验:CentOS下构建私有CA
  • startActivityForResult()的用法(超好用啊)
  • [MongoDB]------windos下的安装部署与基础使用
  • JS小技巧
  • 【研究任务】热迁移方式——pre-copy、post-copy和x-multifd
  • 创建用于自定义SharePoint解决方案部署的Visual Studio项目
  • JavaScript中的对象个人分享
  • Python数据结构
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 〔开发系列〕一次关于小程序开发的深度总结
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • Java 多线程编程之:notify 和 wait 用法
  • JavaScript-Array类型
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • Puppeteer:浏览器控制器
  • redis学习笔记(三):列表、集合、有序集合
  • Spring声明式事务管理之一:五大属性分析
  • tensorflow学习笔记3——MNIST应用篇
  • Web Storage相关
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 前端_面试
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #QT(一种朴素的计算器实现方法)
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (一)u-boot-nand.bin的下载
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)memcache、redis缓存
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .net 后台导出excel ,word
  • .NET 设计模式初探
  • .NET企业级应用架构设计系列之技术选型
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • @EnableConfigurationProperties注解使用
  • @RequestMapping-占位符映射
  • [BPU部署教程] 教你搞定YOLOV5部署 (版本: 6.2)
  • [BZOJ] 2044: 三维导弹拦截
  • [BZOJ1877][SDOI2009]晨跑[最大流+费用流]
  • [CF]Codeforces Round #551 (Div. 2)
  • [ESP32 IDF]web server