MySQL索引相关问题

输出的时候结果很混乱

img


别人输出是这样的

img


我这出了什么问题,该怎么改正

这跟索引没关系,把你的create数据拿出来

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7802771
  • 这篇博客也不错, 你可以看下mysql数据库在查询的时候不能使用字段别名,字段别名只在显示的时候显示出来
  • 你还可以看下mysql参考手册中的 MySQL 错误信息和常见的问题 与优化器有关的问题
  • 除此之外, 这篇博客: MySQL数据库被攻击,被删库勒索,逼迫我使出洪荒之力进行恢复数据中的 恢复数据的过程 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    1. 首先,我备份了一些重要的数据,比如mysql的data,redis的日志文件,文件(呜呜呜,我的文件还是没有来及备份,导致我的文章好多文件丢失。。。)

    2. 然后,我重置了我的服务器,防止黑客在攻击的过程中,植入一些见不得人的脚本,继续破坏我以及我的服务器。(极其建议服务器被攻击过的进行这一步操作)

    3. 针对恢复mysql数据库的一些操作:
      一. 安装msyql 我使用yum进行安装的,配置和数据分别放置的

      #(a)数据库目录
      /var/lib/mysql/
      #(b)配置文件
      /usr/share /mysql(mysql.server命令及配置文件)
      #( c )相关命令
      /usr/bin(mysqladmin mysqldump等命令)
      #(d)启动脚本
      /etc/rc.d/init.d/(启动脚本文件mysql的目录)

      二. 根据上边找到数据目录,mysql数据库的binlog会默认保存到/var/lib/mysql/这个目录,默认格式:binlog.000001

      /var/lib/mysql/

      建议做好这个文件的备份,防止数据丢失,可以根据这个文件进行找回,恢复。
      注意:
      重置数据库的话,当前目录是没有需要恢复的日志文件。
      首先需要你从本地上传到这个目录中,比如
      在这里插入图片描述
      然后修改binlog.index,记录当前binlog的index,服务器会从这里读取对应路径下的文件
      在这里插入图片描述
      然后才能正常执行以下操作。

      三. 登录到mysql服务,然后执行命令show binlog events in ‘binlog.000001’;
      如果用户被删掉,不能正常登录的话,可以这样:
      首先停掉mysql服务,然后执行/usr/bin/mysqld_safe --skip-grant-tables &跳过验证登录,
      然后另开一个xshell窗口输入mysql,进入mysql服务,执行以上命令
      这个命令是查看这个文件的执行情况在这里插入图片描述

      四. 执行命令,并把nov3.sql文件下载到本地查看

      /usr/bin/mysqlbinlog --no-defaults -v --base64-output=decode-rows binlog.000001 > nov3.sql

      因为binlog.000001是一个二进制文件,这个命令会把解码加密的语句,这样我们可以看到mysql执行的每一个sql,如果不加–base64-output=decode-rows这个参数,看到的结果时这样的:
      在这里插入图片描述
      加上是这样的:
      在这里插入图片描述
      所以才有了以上我给大家展示的内容,否则我也不知道。。。苦笑。。。
      执行这条命令是为了防止文件中存在对数据有害的操作指令,比如我给大家展示黑客的操作。这样我才能避免一些不能执行的指令。

    五. 添加参数执行

    /usr/bin/mysqlbinlog binlog.000007 | mysql -uroot -p -v -f > /opt/1.txt

    然后输入密码开始恢复数据,
    -f是为了跳过执行错误,
    -v是展开执行的详细信息
    如果文件中存在不能执行的指令,可以按照时间进行执行比如:
    加上时间段参数 --start-datetime=‘2022-01-06 14:14:37’ --stop-datetime=‘2022-01-24 13:04:44’

    /usr/bin/mysqlbinlog --no-defaults -v --base64-output=decode-rows binlog.000011 --start-datetime=‘2022-01-06 14:14:37’ --stop-datetime=‘2022-01-24 13:04:44’ > nov3.sql

    时间可以根据nov3.sql中的时间进行截段执行,比如
    在这里插入图片描述

    到此,我的数据就恢复全部了。。。

  • 您还可以看一下 CSDN数据库讲师老师的MySQL 数据库备份并自动发送备份邮件课程中的 所有数据库服务器的配置小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    针对优化MySQL索引以改善输出结果的混乱问题,可以采取以下方法:

    1.优化查询语句

    首先需要检查查询语句是否优化,可以使用EXPLAIN关键字来看查询语句的执行计划,看是否需要添加索引来加速查询。

    2.创建适当的索引

    根据查询的具体情况,可以创建适当的索引来加速查询,例如创建单列索引、组合索引、全文索引等。在创建索引时需要注意,索引的数量应该适中,过多的索引会降低写操作的性能。

    可以使用以下语句来创建索引:

    创建单列索引:

    CREATE INDEX index_name ON table_name(col_name);
    

    创建组合索引:

    CREATE INDEX index_name ON table_name(col1_name, col2_name);
    

    创建全文索引:

    ALTER TABLE table_name ADD FULLTEXT index_name(col_name);
    

    3.使用临时表

    在需要进行聚合查询时,可以使用临时表来存储中间结果,可以通过以下语句来创建临时表:

    CREATE TEMPORARY TABLE temp_table(col1_name INT, col2_name VARCHAR(10));
    

    注意,临时表只在连接期间存在,连接断开后会自动删除。

    4.对表进行优化

    可以通过OPTIMIZE TABLE语句来对表进行优化,包括调整表的结构、重建索引等操作。

    OPTIMIZE TABLE table_name;
    

    5.避免全表扫描

    在查询时应该尽量避免全表扫描,可以通过合理的筛选条件来减少扫描的行数,同时在查询语句中避免使用函数等操作,以免降低查询的性能。

    以上是几种优化MySQL索引的方法,需要根据具体情况进行选择和调整。