首页 > 数据库 >Mysql数据库

Mysql数据库

时间:2023-08-18 17:45:35浏览次数:34  
标签:数据库 查询 索引 Mysql id 主键 select

 问题1:如何定位Mysql慢查询?

分析:聚合查询、多表查询、表数据量过大、深度分页查询,导致页面加载慢、接口压测响应时间超过1s。

答:A使用开源运维工具,比如Arthas、SkyWalking;B使用Mysql自带的慢查询日志,调试阶段使用;

 问题2:SQL执行慢,是如何分析优化的呢?

  聚合查询,加临时表

  多表查询,优化sql语句

  表数据量过大,添加索引

  深度分页查询,

通过执行计划来分析,EXPLAIN / DESC命令来查看执行计划

 

 

 说下Mysql数据库的索引,什么是索引?

  索引(index)是帮助MySQL高效获取数据的数据结构(有序)

  提高数据检索的效率,降低数据库的IO成本(不需要全表扫描)
  通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗

说下索引的底层数据结构?

MySQL的InnoDB引擎采用的B+树的数据结构来存储索引
  阶数更多,路径更短
  磁盘读写代价B+树更低,非叶子节点只存储指针,叶子阶段存储数据

   B+树便于扫库和区间查询,叶子节点是一个双向链表

  对比数据结构(二叉树、红黑树、B树、B+树)

样么是聚族索引件么是非聚族索引?
  聚簇索引(聚集索引):数据与索引放到一块,B+的叶子节点保存了整行数据,有且只有一个。 

    聚集索引选取规则:
    如果存在主键,主键索引就是聚集索引。
    如果不存在主键,将使用第一个唯一 (UNIQUE) 索引作为聚集索引。Y
    如果表没有主键,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引。

  非聚簇索引(二级索引):数据与索引分开存储,B+树的叶子节点保存对应的主键,可以有多个

知道什么是回表查询嘛?
  通过二级索引找到对应的主键值,到聚集索引中查找整行数据,这个过程就是回表

  select * from user where name = Arm';//name有索引,先走二级查询找到主键,再走一级索引。

 知道什么叫覆盖索引嘛 ?

   覆盖索引是指查询使用了索引,返回的列,必须在索引中全部能够找到

  优化方案:使用主键id查询,直接走聚集索引查询,一次索引扫描,直接返回数据,性能高。如果返回的列中没有创建索引,有可能会触发回表查询,尽量避免使用select*

 MYSQL超大分页怎么处理?

问题:在数据量比较大时,limit分页查询,需要对数据进行排序,效率低解决方案:覆盖索引+子查询

select * from tb sku t, (select id from tb sku order by id limit 9000000,10) a
where t.id = a.id;

 索引创建原则有哪些?

  1).数据量较大比如10+,且查询比较频繁的表            重要
  2)常作为查询条件where、排序order by、分组group by的字段    重要

  3).字段内容区分度高
  4).内容较长,使用前缀索引
  5)减少单列索引,尽量联合索引,很多时候可以成为覆盖索引,避免回表查询提高效率 重要
  6)要控制索引的数量,越多维护索引结构代价就大,增删改效率差          重要
  7)如果索引列不能存储NULL值,请在创建表时使用NOT NULL约束它

 什么情况下索引会失效? 通常指的是联合索引失效问题

  违反最左前缀法则
  范围查询右边的列,不能使用索引
  不要在索引列上进行运算操作,索引将失效
  字符串不加单引号,造成索引失效。(类型转换)
  以%开头的Like模糊查询,索引失效

 谈一谈你对sql的优化的经验

  表的设计优化,数据类型的选择
  索引优化,索引创建原则
  sql语句优化,避免索引失效,避免使用select* ....
  主从复制、读写分离,不让数据的写入,影响读操作
  分库分表

 

标签:数据库,查询,索引,Mysql,id,主键,select
From: https://www.cnblogs.com/wycnblogs/p/17639634.html

相关文章

  • 构建高性能的后端服务:使用 Java Spring Boot 和 MySQL
    在现代应用开发中,构建高性能的后端服务是至关重要的。本文将介绍如何利用JavaSpringBoot框架和MySQL数据库来构建一个高性能的后端服务,实现数据存储与检索。为什么选择JavaSpringBoot和MySQL?JavaSpringBoot:SpringBoot是一个快速开发框架,可以帮助你迅速构建独立的、......
  • zabbix-agent2监控mysql
    1、安装zabbixagent2到mysql服务器mysql服务器地址为10.0.0.6,安装zabbix_agent2。不同系统的安装方式有略微差别2、在zabbixagent2端修改配置vim/etc/zabbix/zabbix_agent2.confServer=10.0.0.5ServerActive=10.0.0.5Hostname=10.0.0.63、在mysql服务器新建zabbix监控......
  • Linux 下php7.2安装mysql扩展
    环境CPU:x86_64OS:CentOSLinuxrelease7.5php:7.2.34pdo_mysql:7.2.34安装进入安装包mysql扩展目录进入到php安装包(php-7.2.34.tar.gz)的解压目录php-7.2.34中的扩展目录,准备进行编译cd/opt/php-7.2.34/ext/pdo_mysql编译安装mysql扩展这个过程3步执行:--with......
  • mysql中利用sql语句修改字段名称,字段长度等操作--九五小庞
    在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或字段的注释,把同字段属性调整到一块儿。这些操作可以在phpmyadmin或者别的mysql管理工具中完成,但是我们有时为了更方便的管理,会选择写sql语句来实现。1.修改字段的长度语......
  • oracle转达梦数据库的一些坑
    oracle和达梦的一些函数使用有区别,比如OracleDMSelectDUMMYFromdualSelectIDFromdualto_ncharto_charNLS_UPPERNLS_UPPER达梦关键字比较多,使用时有可能冲突,可以使用以下方式屏蔽关键字,或者直接修改sql语句进行规避SF_SET_SYSTEM_PARA_VALUE('EXCLUDE......
  • 什么情况下数据库表索引会失效?
    什么情况下数据库表索引会失效?1.单独引用复合索引里非第⼀位置的索引列假如有INDEX(a,b,c),当条件为a或a,b或a,b,c时都可以使用索引,但是当条件为b,c时将不会使用索引。复合索引遵守“最左前缀”原则,即在查询条件中使用了复合索引的第⼀个字段,索引才会被使用。因此,在复合索引中索......
  • 亚信科技AntDB数据库连年入选《中国DBMS市场指南》代表厂商
    近日,全球权威ICT研究与顾问咨询公司Gartner发布了2023年《MarketGuideforDBMS,China》(即“中国DBMS市场指南”),该指南从市场份额、技术创新、研发投入等维度对DBMS供应商进行了调研。亚信科技是领先的数智化全栈能力提供商,作为国内最早一批投入数据库研发的企业,其自研的AISWare......
  • docker搭建MySQL的主从复制
    用Docker搭建Mysql的主从复制原创 青菜浪人 青菜浪人 2023-07-3015:33 发表于陕西收录于合集#docker11个创建主容器docker run -d -p 3306:3306 --privileged=true -v /mysql/log:/var/log/mysql -v /mysql/data:/var/lib/mysql -v /mysql/conf:/etc/mysql......
  • mysql 如何 在用逗号分隔开的字符串中精确查询出 多个字符串
    例如:在MySQL字段中有值为1,2,3,4,5,6,8,1099,98,91,95,97两条数据而我想查出两个数据1和95如果使用find_in_set查询则无法查询出来  则需要使用mysql内置方法SELECT*FROMpay_configWHERECONCAT(',',product_ids,',')REGEXP',(1|43|15),'concat......
  • mysql优化
    优化MySQL数据库性能是确保应用程序高效运行的重要任务之一。下面是一些常见的MySQL优化方法和技巧:索引优化:确保关键字段和经常用于查询的字段都有适当的索引。避免过多索引,因为它们可能导致写操作变慢。使用复合索引,将多个字段组合在一起,以提高多字段查询的性能。定期分析和优化索......