热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MySQL数据库索引及优化

索引什么是索引索引是用来提高数据库性能的常用工具,索引就像数据的目录一样,通过索引可以快速找到需要的内容。索引的原理,加快查询索引是建立了针对数据内容的排序结果的指针,根据

索引

什么是索引

索引是用来提高数据库性能的常用工具,索引就像数据的目录一样,通过索引可以快速找到需要的内容。

索引的原理,加快查询

索引是建立了针对数据内容的排序结果的指针,根据指针快速定位所要的数据。

索引的设计原则

1  索引列一般为where子句中的列或连接列子句中的列。

2  尽量不对基数小的列做索引。

3  尽可能使用短索引,如果对字符列索引尽量指定最小长度。

4  复合索引前缀特性,索引的顺序很重要。

  创建复合索引时将最常用限制条件列放在最左边,一次递减。

5  避免出现无用的索引。

6  InnoDB尽量指定主键。

避免过度使用索引

1  索引的建立对提高检索能力有用,但是对数据库维护很费资源。

2  对选择性不高的列(例如性别)过度索引,影响插入更新速度。

3  索引会占用磁盘空间,降低写操作,执行计划要考虑各个索引。

4  索引不是越多越好。

索引语法

1  创建索引语法

Syntax:
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
    [index_type]
    ON tbl_name (index_col_name,...)
    [index_option]
    [algorithm_option | lock_option] ...

2  删除索引

Syntax:
DROP INDEX index_name ON tbl_name
    [algorithm_option | lock_option] ...

3  查看表索引

mysql> show index from t1;

更多语法用帮助查看

mysql> help create index
mysql> help alter table

索引类型

1  主键索引

2  唯一索引

3  复合索引

4  覆盖索引

5  函数索引

6  分区索引

优化

1  硬件软件优化。

  硬件:cpu、内存、硬盘(性能ssd > sas > sata)、磁盘raid

  软件:操作系统(x86_64)、MySQL(编译安装)

2  参数优化(my.cnf)。

  监控(show global status \G)、工具(mysqlreport)

3  SQL语句的优化。 

  1.索引的优化。

    a 抓出慢sql,配置my.cnf,或白名单机制

     long_query_time=2 #大于2秒就记录

       log-slow-queries=/data/3306/slow-log.log # 按天轮询 按天分析

    b 慢查询日志分析工具

      mysqlsla

    c 处理:每天晚上0点定时分析慢查询。

  2.SQL语句的拆分(大的复杂的SQL语句拆分成小的)。

    子查询、join连表查询

  3.数据库是存储数据的地方,计算功能尽量放在前端应用程序。

  4.搜索功能,一般不要用数据库。

4  架构的优化。

  1.业务上进行拆分(像搜索 like)

  2.数据库前端必须加缓存cache,例:memcached。

  3.某些业务使用nosql持久化存储,例:memcahcedb,redis。

  4.动态的数据静态化,整个文件静态化,页面片段静态化。

  5.数据库集群与读写分离,一主多从等,通过程序或dbproxy进行集群读写分离。

  6.单表超过千万,拆库拆表。

5  流程制度安全优化。 

   1.任何一次人为数据库记录的更新都要走流程。

   2.客户端管理。

 


推荐阅读
  • 深入解析JavaScript中的this关键字
    本文详细探讨了JavaScript中this关键字的具体指向及其在不同场景下的应用,通过实例和图表帮助读者更好地理解和掌握这一核心概念。 ... [详细]
  • 本文详细介绍了Golang中string类型的内部结构及其特性,包括字符串的定义、表示方式、数据结构以及相关的操作方法,如字符串拼接和类型转换等。 ... [详细]
  • 华为云openEuler环境下的Web应用部署实践
    本文详细记录了在华为云openEuler系统上进行Web应用部署的具体步骤,包括配置yum源、安装Apache、MariaDB、PHP及其相关组件,并完成WordPress的安装与配置过程。 ... [详细]
  • 深入解析mt_allocator内存分配器(二):多线程与单线程场景下的实现
    本文详细介绍了mt_allocator内存分配器在多线程和单线程环境下的实现机制。该分配器以2的幂次方字节为单位分配内存,支持灵活的配置和高效的性能。文章分为内存池特性描述、内存池实现、单线程内存池实现、内存池策略类实现及多线程内存池实现等部分,深入探讨了内存池的初始化、内存分配与回收的具体实现。 ... [详细]
  • Node.js模块化的优势及实践
    本文探讨Node.js模块化的重要性和具体实现方式,包括其带来的代码复用性增强、可维护性提升、以及如何有效避免命名冲突等问题。 ... [详细]
  • 本文档提供了首次周测的答案解析,涵盖特殊符号、命令作用、路径说明以及实战练习等内容。 ... [详细]
  • 本文将详细探讨MySQL中较为特殊的三种数据类型:SQLTEXT、DATE以及SET,包括它们的基本用法、适用场景及一些高级特性。 ... [详细]
  • 本文介绍了一个基本的同步Socket程序,演示了如何实现客户端与服务器之间的简单消息传递。此外,文章还概述了Socket的基本工作流程,并计划在未来探讨同步与异步Socket的区别。 ... [详细]
  • 探讨Linux系统中PCI设备的I/O地址与内存映射的区别及其实现方式。 ... [详细]
  • 在使用KVM虚拟化技术通过NAT模式启动虚拟机时,可能会遇到qemu-ifup-nat脚本执行失败的错误。本文将详细介绍如何诊断和解决这一问题。 ... [详细]
  • Redis: 高效的键值存储系统
    Redis是一款遵循BSD许可的开源高性能键值存储系统,它不仅支持多种数据类型的存储,还提供了数据持久化和复制等功能,显著区别于其他键值缓存解决方案。 ... [详细]
  • 本文深入解析了Docker Run命令的使用方法及其应用场景,提供了详细的参数说明和实例操作,旨在帮助开发者更好地理解和利用这一强大的容器化工具。 ... [详细]
  • 使用IntelliJ IDEA高效开发与运行Shell脚本
    本文介绍了如何利用IntelliJ IDEA中的BashSupport插件来增强Shell脚本的开发体验,包括插件的安装、配置以及脚本的运行方法。 ... [详细]
  • ED Tree HDU4812 点分治+逆元
    这道题非常巧妙!!!我们进行点分治的时候,算出当前子节点的所有子树中的节点,到当前节点节点的儿子节点的距离,如下图意思就是当前节点的红色节点,我们要求出红色节点的儿子节点绿色节点, ... [详细]
  • 本文详细介绍了Python中的生成器表达式、列表推导式、字典推导式及集合推导式等,探讨了它们之间的差异,并提供了丰富的代码示例。 ... [详细]
author-avatar
才客caike
才客,优质人才的私人职业顾问。一人一岗,专业专注!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有