精华内容
下载资源
问答
  • mysql多列转一

    2019-11-06 10:27:24
    GROUP_CONCAT + in 文档描述: ps:该文档里面指的是对group后的结果的处理,而不是作为条件,所以不用看... 第二种,看的不是明白,没测试:https://blog.csdn.net/qq_30607881/article/details/78214312

    在这里插入图片描述

    GROUP_CONCAT + in

    文档描述:

    ###################################################

    展开全文
  • MySql多列索引

    千次阅读 2019-05-11 20:04:16
    多列索引就是将作为一个索引,在一个多列B-Tree索引中,索引的顺序意味着索引首先按照最左进行排序,然后第二第三等等。所以可以按照升序或者降序进行扫描,以满足精确符合顺序的ORDER BY,GROUP BY...

    多列索引

    多列索引就是将多个列作为一个索引,在一个多列B-Tree索引中,索引列的顺序意味着索引首先按照最左列进行排序,然后第二列第三列等等。所以可以按照升序或者降序进行扫描,以满足精确符合列顺序的ORDER BY,GROUP BY和DISTINCT等子句,所以,多列索引的顺序至关重要,key(列1,列2)和key(列2,列1)这两个多列索引很可能有巨大的性能差距。

    设计索引的时候是多个单列索引好,还是设置为多列索引好

    多个单列索引

    定义:即是在表中在需要索引的字段上为每个字段设计一个索引;

    特点:简单,索引个数多;

    多列索引

    定义:即是在表中根据查询需求在多个字段上设计一个索引;

    特点:稍微复杂,需要考虑索引顺序;

    性能上的对比

    • 多个单列索引的情况下,MySql在执行查询时,如果where条件中是使用and连接各种过滤条件的,那么MySql会选择其中一个限制最严格的索引(区分度最高的)。
    • 多列联合索引中由于索引是考虑索引字段顺序的,根据InnoDB中B-Tree的实现原理,单个索引限制再严格也没有多列限制严格,所以在多列索引的情况下数据库扫描更少的行,可以在较短的时间内返回数据;

    判断依据

    主要使用MySql的查询计划来判断执行器在查询数据的时候到底使用哪个索引,主要的依据是根据执行计划的Extra字段,下面是Extra在不同情况下代表的使用不同类型的索引

    • Using index:直接使用索引,覆盖索引的情况,可以通过索引直接返回所需数据。
    • Using indexc ondition:使用索引,但需要回表查询相关数据

    覆盖索引

    定义:查询所需数据通过索引可以直接获取到,不需要回表查询数据行;

    • Select查询返回列包含在索引列中
    • where条件包含索引列或复合索引的前导列
    • 查询结果的总字段长度可以接受

    索引合并

    在索引设计不太合理的时候,MySql可能会对一些查询执行索引合并

    • 在多个单列索引的情况下,
      • where条件的索引列使用or连接时,会触发索引合并
      • where条件的索引列使用and连接时,通常会选择限制最严格的索引,这个时候联合索引(多列索引)比较合适
    • 合并标识
      • 使用 explain 可看到 type:index_merge
    • 触发索引合并,说明当前索引设计的比较糟糕
    参考博客

    MySQL单列索引和多列索引

    展开全文
  • MYSQL 子查询返回多列显示

    千次阅读 2017-10-28 14:35:51
    因工作需要,目前研究出一种mysql 技能,与大家分享一下。 需求:关联查询另一个大表数据的某些(一个以上)字段 方案:因关联查询的表数据大。表查询影响效率,单个子查询又有些多余。所以采用多列拼接子...

    因工作需要,目前研究出一种mysql 技能,与大家分享一下。

    需求:关联查询另一个大表数据的某些(一个以上)字段

    方案:因关联查询的表数据太大。多表查询影响效率,单个子查询又有些多余。所以采用多列拼接子查询,然后根据SUBSTRING_INDEX(SOURCE,SEPARETOR,INDEX+1)。

    原理:子查询返回拼接列;函数截取还原列

    可执行脚本:

    SELECT 
    SUBSTRING_INDEX(temp.temp_column,",",1) showFirst, 
    SUBSTRING_INDEX(temp.temp_column,",",-1) showOver, 
    SUBSTRING_INDEX(SUBSTRING_INDEX(temp.temp_column,',',2),',',-1) showTwo,
    temp.*
    FROM 
    (
    SELECT (
    SELECT CONCAT_WS(',','12','23','34','45')) temp_column) temp;

    展开全文
  • 用两个表(a_table、b_table),关联字段a_table.a_id和b_table.b_id来演示一下MySQL的内连接、外连接( 左(外)连接、右(外)连接、全(外)连接)。 MySQL版本:Server version: 5.6.31 MySQL Community Server ...

    用两个表(a_table、b_table),关联字段a_table.a_id和b_table.b_id来演示一下MySQL的内连接、外连接( 左(外)连接、右(外)连接、全(外)连接)。

    MySQL版本:Server version: 5.6.31 MySQL Community Server (GPL)

    数据库表:a_table、b_table

    主题:内连接、左连接(左外连接)、右连接(右外连接)、全连接(全外连接)

    前提

    建表语句:

    CREATE TABLE `a_table` (
      `a_id` int(11) DEFAULT NULL,
      `a_name` varchar(10) DEFAULT NULL,
      `a_part` varchar(10) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    CREATE TABLE `b_table` (
      `b_id` int(11) DEFAULT NULL,
      `b_name` varchar(10) DEFAULT NULL,
      `b_part` varchar(10) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8

    表测试数据:



    一、内连接

    关键字:inner join on
    语句:select * from a_table a inner join b_table b on a.a_id = b.b_id;
    执行结果:


    说明:组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集(阴影)部分。

    二、左连接(左外连接)

    关键字:left join on / left outer join on
    语句:select * from a_table a left join b_table b on a.a_id = b.b_id;
    执行结果:


    说明:
    left join 是left outer join的简写,它的全称是左外连接,是外连接中的一种。
    左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。

    三、右连接(右外连接)

    关键字:right join on / right outer join on
    语句:select * from a_table a  right outer join b_table b  on a.a_id = b.b_id;
    执行结果:


    说明:
    right join是right outer join的简写,它的全称是右外连接,是外连接中的一种。
    与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。


    四、全连接(全外连接)

    MySQL目前不支持此种方式,可以用其他方式替代解决。

    五、补充,MySQL如何执行关联查询

    MySQL认为任何一个查询都是一次“关联”,并不仅仅是一个查询需要到两个表匹配才叫关联,所以在MySQL中,每一个查询,每一个片段(包括子查询,甚至基于单表查询)都可以是一次关联。
    当前MySQL关联执行的策略很简单:MySQL对任何关联都执行嵌套循环关联操作,即MySQL先在一个表中循环取出单条数据,然后在嵌套循环到下一个表中寻找匹配的行,依次下去,直到找到所有表中匹配的行为止。然后根据各个表匹配的行,返回查询中需要的各个列。请看下面的例子中的简单的查询:

    查询语句:select tbl1.col1, tbl2.col2 from tbl1 inner join tbl2 using(col3) where tbl1.col1 in (5, 6);
    假设MySQL按照查询中的表顺序进行关联操作,我们则可以用下面的伪代码表示MySQL将如何完成这个查询:
    outer_iter = iterator over tbl1 where col1 in (5, 6)
    outer_row = outer_iter.next
    while outer_row
        inner_iter = iterator over tbl2 where col3 = outer_row.col3
        inner_row = inner_iter.next
        while inner_row
            output [ outer_row.col1, inner_row.col2]
            inner_row = inner_iter.next
        end
        outer_row = outer_iter.next
    end
    上面的执行计划对于单表查询和多表关联查询都适用,如果是一个单表查询,那么只需要上面外层的基本操作。对于外连接,上面的执行过程仍然适用。例如,我们将上面的查询语句修改如下:
    select tbl1.col1, tbl2.col2 from tbl1 left outer join tbl2 using(col3) where tbl1.col1 in (5, 6);
    那么,对应的伪代码如下:
    outer_iter = iterator over tbl1 where col1 in (5, 6)
    outer_row = outer_iter.next
    while outer_row
        inner_iter = iterator over tbl2 where col3 = outer_row.col3
        inner_row = inner_iter.next
        if inner_row
            while inner_row
                output [ outer_row.col1, inner_row.col2]
                inner_row = inner_iter.next
            end
        else
            output [ outer_row.col1, null]
        end
            outer_row = outer_iter.next
    end
    说明:第五部分摘自《高性能MySQL 第三版》








    展开全文
  • mysql查询结果多列拼接查询

    万次阅读 2018-08-17 09:41:18
    之前遇到过一个问题,mysql数据库中有两个表,一张地址表存放省市区等位置信息,另一张用户表里存在三个字段分别对应地址表中的三个位置信息(很奇怪的表格式),如图: 现在需要查询user表中的数据,并根据user表中省市...
  • MySql查询返回条数据多列合并

    千次阅读 2018-11-30 17:12:22
    最近帮人做了一个成绩单打印的功能,需要在成绩单上打印出成绩划分等级和具体的成绩范围,左思右想~~~在一条SQL搞定和循环条记录拼接之间徘徊,由于时间匆忙,还是选择了简单的查询、循环、拼接。但是还是不甘心,...
  • mysql多列索引的建立和优化

    千次阅读 2018-11-21 16:58:21
    对于单列索引,没有太多的话题,但是对于多索引的建立,一个好的多索引能使用的场景应可以涵盖很多,减少其他不必要的索引空间,就有很多事情需要注意。 0.首先来了解索引的物理结构: ... 1.where 子句中的多...
  • MySQL单列索引和多列索引

    千次阅读 2018-09-21 16:12:09
    在设计MySql表索引的时候,可能有个问题,就是个单列索引好,还是设计为多列索引好;下面从不同角度分析下这个问题;1.个单列索引: 定义:即是在表中在需要索引的字段上为每个字段设计一个索引; 特点:简单,...
  • mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对的情况下,关键查询的结果是条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生...
  • Mysql中行转转行

    万次阅读 多人点赞 2018-08-14 11:54:39
    即将原本同一下多行的不同内容作为个字段,输出对应内容。 建表语句 DROP TABLE IF EXISTS tb_score; CREATE TABLE tb_score( id INT(11) NOT NULL auto_increment, userid VARCHAR(20) NOT NULL COMMENT ...
  • 多行转多列,废话不说,开始正文:首先,参考了:http://www.cnblogs.com/kingthy/archive/2008/04/29/1175697.html(这个人写的例子很好,很简单,我就是参考他的,然后改的自己的,如果你们的数据库表模式和他的...
  • mysql多行变多列(衍生形式)

    千次阅读 2016-05-06 10:12:55
    我的这篇文章整理了mysql多行变多列的2种常见形式:http://blog.csdn.net/rainyspring4540/article/details/50231435 这里就不赘述了,下面说下它更复杂的衍生形式: 表结构: create table student ( name ...
  • VS连接sql server因为都是微软的,所以VS自带功能,使用很方便,但是连Mysql就不同了,mysql开发的驱动有很的坑。本人亲自尝试,终于找到对策 步骤 1.要安装mysql-connector-net,这个是Windows连接Mysql的驱动...
  • 现象:zabbix邮件报警,故障PROBLEM,服务 Free disk space isless than 20% on volume :xxx.xxx.xxx.xxx发生:/data故障!...再进一步通过du –sh对可以的目录进行检查,发现是mysql的binlog占用空间过大。清
  • 数据库MySQL详解

    万次阅读 多人点赞 2018-07-24 20:03:47
    全网最详细MySQL教程,2021.1再次更新70%的内容,MySQL 8.0 + Navicat 15
  • SELECT * FROM table WHERE classid IN (199,200,201...........有600个)
  • MySQL个表增加相同字段(

    千次阅读 2020-11-10 15:37:02
    打算为个表增加相同字段,这些表的名字在一个表里存着,一个一个修改麻烦,查到下面这种拼接SQL语句的方式: select group_concat('alter table ', table_schema, '.', table_name, ' add column LINDEX INT(10...
  • MySQL数据库面试题(2020最新版)

    万次阅读 多人点赞 2020-03-10 17:20:40
    数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4...
  • 数较的csv文件导入mysql数据库(过程及问题记录)
  • 多行多列合并排序:实现逻辑 ,先合并,并排序,然后合并所有行。 group_concat()函数 就是为了将查询到的所有行的字段拼接起来。【多行合并时使用到】 语法也简单易懂:group_concat(str1, str2,...) 【语法...
  • MySQL存储过程中使用动态行转

    千次阅读 2016-01-21 09:23:59
    这里我用一个比较简单的例子来说明,也是行转的经典例子,就是学生的成绩 三张表:学生表、课程表、成绩表 学生表 就简单一点,学生学号、学生姓名两个字段 CREATE TABLE `student` ( `stuid` VARCHAR(16) ...
  • MySQL相关问题整理

    万次阅读 多人点赞 2020-04-07 11:47:29
    4.MVCC版本并发控制(必考) 5.为什么选择B+树作为索引结构(必考) 6.索引B+树的叶子节点都可以存哪些东西(必考) 7.查询在什么时候不走(预期中的)索引(必考) 8.sql如何优化 9.explain是如何解析sql的 ...
  • MySQL 8.0.19安装教程(windows 64位)

    万次阅读 多人点赞 2018-08-15 18:05:05
    话不说直接开干 目录 1-先去官网下载点击的MySQL的下载​ 2-配置初始化的my.ini文件的文件 3-初始化MySQL 4-安装MySQL服务 + 启动MySQL 服务 5-连接MySQL + 修改密码 先去官网下载点击的MySQL的...
  • mysql表名与名单引号引发的问题

    千次阅读 2019-05-09 19:44:31
    mysql表名与名单引号问题 当我建立如下表的时候报如下错: mysql> create table goods( -> goods_id mediumint(8) unsigned not null auto_increment, -> cat_id smallint(5) unsigned not null default ...
  • mySQL

    千次阅读 2009-03-05 14:03:00
    mySQL MySQL名字的来历 MySQL最初的开发者的意图是用mSQL和他们自己的快速低级例程(ISAM)去连接表格。不管怎样,在经过一些测试后,开发者得出结论:mSQL并没有他们需要的那么快和灵活。这导致了一个使用几乎和...
  • mysql数据库数据(字段数过大)太多导入不了的决方法: 1、打开navicat 工具 2、在数据库上右键,执行右键菜单命令“命令界面” 3、在打开的窗口中,运行set global max_allowed_packet = 524288000; 4、再导入...
  • mysql explain type 和extra 的含义

    千次阅读 2016-05-07 15:40:32
    mysql进行调优的时候都肯定会用到explain来看select语句的执行情况,这里简单介绍结果中两个的含义。  type 官方的说法,说这表示的是“访问类型”,更通俗一点就是:mysql找到需要的数据行的方式。一下...
  • mysql列类型char,varchar,text,tinytext,mediumtext,longtext的比较与选择 储存不区分大小写的字符数据 TINYTEXT 最大长度是 255 (2^8 – 1) 个字符。 TEXT 最大长度是 65535 (2^16 – 1) 个字符。 ...
  • mysql如何给创建索引

    千次阅读 2017-08-25 16:25:19
    mysql数据库建立索引 前些时候,一位颇高级的程序员居然问我什么叫做索引,令我感到十分的惊奇,我想这绝不会是沧海一粟,因为有成千上万的开发者(可能大部分是使用MySQL的)都没有受过有关数据库的正规培训,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 114,994
精华内容 45,997
热门标签
关键字:

mysql列太多

mysql 订阅