iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql优化和索引
  • 641
分享到

mysql优化和索引

2024-04-02 19:04:59 641人浏览 安东尼
摘要

表的优化1.定长与变长分离    如 int,char(4),time核心且常用字段,建成定长,放在一张表;    而varchar,text,blob这种

  • 表的优化

1.定长与变长分离

    如 int,char(4),time核心且常用字段,建成定长,放在一张表;

    而varchar,text,blob这种变长字段适合单放一张表,用主键与核心表关联。

2.常用字段和不常用字段要分离

3.在 1 对多需要关联统计的字段上,添加冗余字段。


  • 列类型选择原则

1.字段类型优先级  整型 > date,time > enum,char > varchar > blob,text

2.够用就行,不要慷慨,大的字段浪费内存,影响速度。

3.尽量避免用NULL,NULL不利于索引,需要特殊的字节来标注。


  • Enum列的说明

1.enum列在内部是用整型来存储的

2.enum列和enum列想关联速度最快

3.enum列比(var)char的弱势--在碰到与char关联时,要转化,要花时间

4.优势---当char非常长时,enum依然是整型固定长度,当查询的数据量越大时。enum的优势越明显。



  • 索引优化

B-tree索引:myisam,innodb中默认使用B-tree索引。

hash索引:在memory表里,默认使用hash索引。

hash优缺点:1.查询时间复杂度为O(1)。

            2.hash计算的结果是随机的,在磁盘上也是随机放置。

            3.无法对范围查询进行优化

            4.无法利用前缀索引;

            5.排序也无法优化;

           6.必须回行,就是说,通过索引拿到数据位置必须回到表中取数据。


在where条件常用的列上都加上索引,若是独立的索引,同时只能用上1个。

若建立多列索引,index(a,b,c),注意和顺序有关,索引发挥作用,需要满足左前缀要求。

索引在where,order by,group by 中会用上(满足左前缀要求)。

多列索引在实际应用中更加实用,注意在建立多列索引的时候,要结合实际,创建合理的索引。

索引提高查询的速度、提高排序的速度、提高分组查询的速度。


  • 聚簇索引和非聚簇索引

聚簇索引:btree 

          innodb引擎,索引和数据是在一块的,

          innodb直接在主键索引的树中,储存行的数据,(既存储了主键值,又存储了行数据)。

          innodb次索引指向对主键的引用。

          优点:根据主键查询条目比较少时,不用回行(数据就在主键节点下)。

          缺点:如果碰到不规则数据插入时,造成频繁的页分裂。

非聚簇索引:btree 

            myisam引擎, 索引和数据是分开的,

            myisam索引指向行在磁盘上的位置

            myisam中,主索引和次索引都指向物理行(磁盘位置)。


索引覆盖:

如果查询的列恰好是索引的一部分,那么查询只需要在索引文件上进行,不需要回行到磁盘再找数据。


索引与排序

  1. 对于覆盖索引,直接在索引上查,就是有序的;

  2. 在innodb引擎上,沿着索引的字段排序,也是自然有序的,对于myisam引擎,按某索引字段排序,但取出的字段包含有不是索引字段,那么会先取出所有行,再进行排序。

  3. 先取出数据,形成临时表,做filesort文件排序(要尽可能避免)。

  4. 争取目标:取出来的数据本身就是有序的,利用索引来排序。


SQL语句优化

  1. sql语句的时间花在等待时间、执行时间,只有降低执行时间,那其他语句定的时间也减少了;

  2. SQL语句的执行时间又花在查找、取出;

  3. 如何查询快?a)联合索引的顺序、区分度、长度 b)取得快,索引覆盖 c)传输的少,更少的行和列;

  4. 切分查询,将数据拆成多次,例:插入10000条数据,每1000条为单位插入;

  5. 分解查询,按逻辑把多表连接查询分成多个简单SQL

    总结:少查,尽量精准数据,少取行;必须要查,尽量走在索引上查询行;取时,取尽量少的列;

  6. 在group时,用带有索引的列来group,可以避免临时表和文件排序,速度会稍快些,另外用int型比char型分组,也要快些;

  7. 在group时,我们假设只取了A表的内容,group by的列,尽量用A表的列,会比B表的列要快。

  8. order by的列要和group by 的列一致,否则也会引起临时表,因为两者都需要排序,如果两者的列不一致,那必须经过至少1次排序;


如何判断查询是否用到了索引?

查询方法:  explain  SQL  \G

extra字段:

    using index: 指用到了索引覆盖,效率非常高;

    using where:指光靠索引还定位不到,还得where判断一下

    using temporary:指用上了临时表,group by 与 order by 不同列时或 group by 、order by 别的表的列时

    using filesort:文件排序,文件可能在磁盘,也可能在内存。


子查询

1.from型子查询

注意:内层from语句查到的临时表,是没有索引的,所以from的返回内容要尽量少,需要排序,在内层先排好序。

2.in型子查询

Mysql的查询优化器,针对in型优化,被改成exists子查询的执行效果,单行单行的执行过滤。当外层表越大时,查询速度越慢。可以用连接查询来代替子查询。


limit及翻页优化

limit offset,N

当offset非常大时,效率很低,因为mysql先取offset+N行,返回放弃前offset行,返回N行。

优化办法:

1)从业务上去解决,不允许翻过100页。例如百度,一般能翻到70多页。

2)不用offset,用条件查询(ID上有索引)

 select * from tablename where id>1000000 limit 2;

3)只查索引,不查数据,得到ID,再用ID去查具体条目(ID上有索引),这种技巧就是延迟关联

select id,xxx,xxx from tablename inner join (

select id from tablename limit 1000000,2 ) as tmp using(id);

比下面直接查数据的方法快,

select id,xxx,xxx from tablename limit 1000000,2;


您可能感兴趣的文档:

--结束END--

本文标题: mysql优化和索引

本文链接: https://www.lsjlt.com/news/40100.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql优化和索引
    表的优化1.定长与变长分离    如 int,char(4),time核心且常用字段,建成定长,放在一张表;    而varchar,text,blob这种...
    99+
    2022-10-18
  • MySQL索引优化
    一、单表 创建索引之前:type=ALL全表扫描,Extra里面的Using filesort(文件内部排序) 根据where后面的条件创建:CREATE INDEX idx_article_ccv ON articl...
    99+
    2019-01-06
    MySQL索引优化
  • mysql织梦索引优化之MySQL Order By索引优化
    在一些情况下,MySQL可以直接使用索引来满足一个ORDER BY 或GROUP BY 子句而无需做额外的排序。尽管ORDER BY 不是和索引的顺序准确匹配,索引还是可以被用到,只要不用的索引部分和所有的额外的ORDER B...
    99+
    2022-10-20
  • MySQL优化(3):索引
    MySQL优化中,最重要的优化手段就是索引,也是最常用的优化手段   索引简介: 索引:关键字与数据位置之间的映射关系 关键字:从数据中提取,用于标识,检索数据的特定内容 目的:加快检索   索引检索为什么快: (1)关键字相对于...
    99+
    2014-05-17
    MySQL优化(3):索引
  • MySQL优化之索引
    SQL为什么需要优化? 对于初学者来说,能够写出实现功能的SQL语句而不出错,查询出所需要的结果,就已经能够满足日常使用了。但在某些场景,对性能的要求比较高,因此,要求SQL的执行响应速度快,就需要对SQL进行一定程度的优化。 在...
    99+
    2021-02-14
    MySQL优化之索引
  • MySQL索引优化EXPLAIN
    日常在CURD的过程中,都避免不了跟数据库打交道,大多数业务都离不开数据库表的设计和SQL的编写,那如何让你编写的SQL语句性能更优呢? 先来整体看下MySQL逻辑架构图: MySQL整体逻辑架构图可以分为Server和存储引擎层。...
    99+
    2015-10-24
    MySQL索引优化EXPLAIN
  • MySQL 5.7 索引优化
    提升查询性能最好的方法就是创建索引。索引项就像指向表中行的指针,让查询通过WHERE条件快速找到所要查询的行。MySQL所有的数据类型都可以创建索引。 不必要的索引会消耗系统的空间和MySQL在判断...
    99+
    2022-10-18
  • centos7-mysql-索引优化
    索引优化,优化查询速度-------------------------------------------------------count,统计一个表总计行数myisam储存引擎有自带计数器,使用cou...
    99+
    2022-10-18
  • MySQL索引优化深入
    创建 test 测试表 CREATE TABLE `test` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `c1` varchar(10) DEFAULT NULL,  `c2`...
    99+
    2016-11-27
    MySQL索引优化深入
  • MySQL索引优化分享
    2,explain的作⽤ 查看表的读取顺序,读取操作类型,有哪些索引可用,表之间关联,每张表中有哪些索引被优化器执⾏ 3,索引命中策略略分析     最左匹配原则 在索引字段上加入函数(不匹配索引)     is null/is not n...
    99+
    2016-09-28
    MySQL索引优化分享
  • MySQL如何优化索引
    1.  MySQL如何使用索引 索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后遍历整个表以找到相关的行。表越大,花费越多。如果表中有相关列的索引,MySQL可以快速确定要在...
    99+
    2022-05-27
    MySQL 索引 MySQL 优化索引
  • MySQL 索引优化案例
    目录数据准备联合索引的首字段用范围查询强制走索引覆盖索引优化in和or什么时候会走索引like xx% 一般都会走索引,和数据量无关索引下推为什么范围查找没有用索引下推优化?如何选择索引Trace 工具深入优化order...
    99+
    2022-08-19
    MySQL索引优化 MySQL索引
  • MySQL--索引优化原则
    索引优化原则 1、最左前缀匹配原则,联合索引,mysql会从做向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3...
    99+
    2022-10-18
  • Mysql索引如何优化
    小编给大家分享一下Mysql索引如何优化,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!编程沉思录     &...
    99+
    2022-10-18
  • MySQL优化及索引解析
    索引简单介绍 索引的本质: MySQL索引或者说其他关系型数据库的索引的本质就只有一句话,以空间换时间。 索引的作用: 索引关系型数据库为了加速对表中行数据检索的(磁盘存储的)数据结...
    99+
    2022-11-13
  • MySQL优化之索引解析
    索引的本质 MySQL索引或者说其他关系型数据库的索引的本质就只有一句话,以空间换时间。 索引的作用 索引关系型数据库为了加速对表中行数据检索的(磁盘存储的)数据结构 索引的分类 数据结构上面的分类 HASH 索引 等值匹配效率...
    99+
    2019-07-07
    MySQL优化之索引解析
  • 理解MySQL——索引与优化
    写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点。考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录。如果没有索引,查询将对整个表进行...
    99+
    2022-05-13
    mysql
  • MySQL索引优化Explain详解
    在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引...
    99+
    2022-05-12
    MySQL索引优化 MySQL Explain
  • MySQL优化之联合索引
    1.表结构 (root@localhost) [test]> show create table t_demo\G; *************************** 1. row ******...
    99+
    2022-10-18
  • MySQL中如何优化索引
    MySQL中如何优化索引,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。文章的脑图如下:索引优化规则1、like语句的前导模糊查询不能使用索...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作