精华内容
下载资源
问答
  • 参考 http://blog.csdn.net/superdont/article/details/3992033a=[1 23 4]如果使用b=reshape(a,1,4),则得到的结果是 b=[1 3 2 4]如果想得到b=[1 2 3 4], 需要使用 b=reshape(a',1,4)因为reshape使用的列优先!...

    参考 http://blog.csdn.net/superdont/article/details/3992033

    a=[1  2

    3  4]

    如果使用b=reshape(a,1,4),则得到的结果是  b=[1 3 2 4]

    如果想得到b=[1 2 3 4],  需要使用  b=reshape(a',1,4)

    因为reshape使用的列优先!(就是说按照列取元素,然后按照列重新放元素)

    b转化回去是同样的道理。

    例题如下:

     

    >> a=[1 ,2 ;3,4]
    a =
         1     2
         3     4
    >> b=reshape(a,1,4)
    b =
         1     3     2     4
    >> b=reshape(a',1,4)
    b =
         1     2     3     4
    >> a=reshape(b,2,2)
    a =
         1     3
         2     4
    >> a=reshape(b',2,2)
    a =
         1     3
         2     4

     


    转载于:https://www.cnblogs.com/whaozl/p/3787657.html

    展开全文
  • 行列优先原则在计算机领域的应用主要如下。行优先或者列优先没有好坏,但其直接涉及到对内存中数据的最佳存储访问方式。因为在内存使用上,程序访问的内存地址之间连续性越好,程序的访问效率就越高;相应地,程序...
  • 摘要 本文主要探讨的是“行优先”原则和“列优先”原则的问题。 1. 背景 首先了解“行优先”和“列优先”...行列优先原则在计算机领域的应用主要如下。行优先或者列优先没有好坏,但其直接涉及到对内存中数据的最佳存

    摘要

    本文主要探讨的是“行优先”原则和“列优先”原则的问题。


    1. 背景

    首先了解“行优先”和“列优先”的知识,这两种方式在数学上的直观描述如下,给定如下矩阵:

    根据行优先的原则,其排序方式为


    根据列优先的原则,其排序方式为



    2. 计算机领域的应用

    行列优先原则在计算机领域的应用主要如下。行优先或者列优先没有好坏,但其直接涉及到对内存中数据的最佳存储访问方式。因为在内存使用上,程序访问的内存地址之间连续性越好,程序的访问效率就越高;相应地,程序访问的内存地址之间连续性越差。所以,我们应该尽量在行优先机制的编译器,比如C/C++,CUDA等等上,采用行优先的数据存储方式;在列优先机制的编译器,比如Fortune, Matlab等等上,采用列优先的数据存储方式。但这种思想渗透到编程中之后,代码的质量就会提高一个档次。


    3. 以矩阵计算为例(Matlab编译器下测试)

    % data
    A = [ 1 1
          2 2
          3 3 
          4 4
          5 5
          6 6
          7 7
          8 8
          9 9];
    B = [ 1 2 3 4 5 6 7 8 9
          1 2 3 4 5 6 7 8 9];
    C = zeros(9,9);
    
    % The method of matrix multiplication in Matlab
    tic 
    C = A*B;
    toc
    
    
    % Our impletation method of matrix multiplication
    tic
    for ra = 1:9 % raws of the matrix A
        for cb = 1:9 % columns of the matrix B
            for len = 1:2 
                C(ra,cb) = A(ra,len)*B(len,cb)+C(ra,cb); 
            end
        end
    end
    toc
    
    
    % Optimal method 1 
    tic
    for cb = 1:9 % columns of the matrix B
        for ra = 1:9 % raws of the matrix A
            for len = 1:2 
                C(ra,cb) = A(ra,len)*B(len,cb)+C(ra,cb); 
            end
        end
    end
    toc
    
    
    % Advanced optimal method 2
    A = A'; % you can also directly given A = [ 1 2 3 4 5 6 7 8 9 
            %                                   1 2 3 4 5 6 7 8 9];
    B = [ 1 2 3 4 5 6 7 8 9
          1 2 3 4 5 6 7 8 9];
    tic
    for i = 1:9 % columns of the matrix A
        for j = 1:9 % columns of the matrix B
            for len = 1:2
                C(i,j) = A(len,i)*B(len,j)+C(i,j);
            end
        end
    end         
    toc
    
    
    

    4. 测试和分析


    测试结果如上图所示,第一个时间为Matlab自带的乘法运算,第二个为我们原始实现的乘法计算,第三个为循环中行列变换(适应列优先编译器的处理)。

    最重要的是第四个是本人原创的矩阵乘法方法,简单地说就是将A矩阵转置,然后设计相应的算法实现矩阵乘运算。在这个点上,希望在理解原理的基础上能给读者一些启发。在本例中,这样做效率最高,原因其一是本例中原始数据结构上适合我这样处理;原因其二是这样做的目的是使得任何一个子乘法的处理上,两乘数所在的内存空间上都是连续,而不仅仅是一个连续(注意:这是本文的核心,读者理解透了一定会很有收获,认真看我给出的程序实现。这是核心,不懂的可以交流思想)!

    另外,本文中我给出的这个方法是矩阵乘法里面最优的方法,至少数学逻辑上是这样。之所以Matlab自带的乘法计算之所以性能还不错,是因为Matlab自带的运算都是经过优化的,包括硬件加速,系统加速等自己设计的应用很能调用加速方法。


    展开全文
  • 这道题目考察的知识点是MySQL组合索引(复合索引)的最左优先原则。 最左前缀匹配原则 在mysql建立联合索引时会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配,组合索引的第一个...

    MySQL数据库,game_order表表结构如下,下面哪些sql能使用到索引?

    这道题目考察的知识点是MySQL组合索引(复合索引)的最左优先原则。

    最左前缀匹配原则

    在mysql建立联合索引时会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配,组合索引的第一个字段必须出现在查询组句中,这个索引才会被用到,示例:
    对列col1、列col2和列col3建一个联合索引:

    KEY test_col1_col2_col3 on test(col1,col2,col3);

    联合索引 test_col1_col2_col3 实际建立了(col1)、(col1,col2)、(col,col2,col3)三个索引。

    上面这个查询语句执行时会依照最左前缀匹配原则,检索时会使用索引(col1,col2)进行数据匹配。

    注意

    索引的字段可以是任意顺序的,如:

    SELECT * FROM test WHERE col1=“1” AND clo2=“2”
    SELECT * FROM test WHERE col2=“2” AND clo1=“1”

    这两个查询语句都会用到索引(col1,col2),mysql创建联合索引的规则是首先会对联合合索引的最左边的,也就是第一个字段col1的数据进行排序,在第一个字段的排序基础上,然后再对后面第二个字段col2进行排序。其实就相当于实现了类似 order by col1 col2这样一种排序规则。

    所以题目会创建三个索引(plat_order_id)、(plat_order_id与plat_game_id的组合索引)、(plat_order_id、plat_game_id与plat_id的组合索引)。根据最左匹配原则,where语句必须要有plat_order_id才能调用索引(如果没有plat_order_id字段那么一个索引也调用不到),如果同时出现plat_order_id与plat_game_id则会调用两者的组合索引,如果同时出现三者则调用三者的组合索引。

    思考

    对于联合索引(col1,col2,col3),查询语句SELECT * FROM test WHERE col2=2;是否能够触发索引?

    EXPLAIN SELECT * FROM test WHERE col2=2;
    EXPLAIN SELECT * FROM test WHERE col1=1;

    借助mysql查询优化器explain,explain会纠正sql语句该以什么样的顺序执行效率最高,最后才生成真正的执行计划,观察explain中上述两个sql语句结果的type字段。查询中分别是:

    • type: index
    • type: ref

    index:这种类型表示mysql会对整个该索引进行扫描。要想用到这种类型的索引,对这个索引并无特别要求,只要是索引,或者某个联合索引的一部分,mysql都可能会采用index类型的方式扫描。但是呢,缺点是效率不高,mysql会从索引中的第一个数据一个个的查找到最后一个数据,直到找到符合判断条件的某个索引。所以,上述语句会触发索引。
    ref:这种类型表示mysql会根据特定的算法快速查找到某个符合条件的索引,而不是会对索引中每一个数据都进行一一的扫描判断,也就是所谓平常理解的使用索引查询会更快的取出数据。而要想实现这种查找,索引却是有要求的,要实现这种能快速查找的算法,索引就要满足特定的数据结构。简单说,也就是索引字段的数据必须是有序的,才能实现这种类型的查找,才能利用到索引。

    为什么要使用联合索引

    减少开销。建一个联合索引(col1,col2,col3),实际相当于建了(col1),(col1,col2),(col1,col2,col3)三个索引。每多一个索引,都会增加写操作的开销和磁盘空间的开销。对于大量数据的表,使用联合索引会大大的减少开销!

    覆盖索引。对联合索引(col1,col2,col3),如果有如下的sql: select col1,col2,col3 from test where col1=1 and col2=2。那么MySQL可以直接通过遍历索引取得数据,而无需回表,这减少了很多的随机io操作。减少io操作,特别的随机io其实是dba主要的优化策略。所以,在真正的实际应用中,覆盖索引是主要的提升性能的优化手段之一。

    效率高。索引列越多,通过索引筛选出的数据越少。有1000W条数据的表,有如下sql:select from table where col1=1 and col2=2 and col3=3,假设假设每个条件可以筛选出10%的数据,如果只有单值索引,那么通过该索引能筛选出1000W10%=100w条数据,然后再回表从100w条数据中找到符合col2=2 and col3= 3的数据,然后再排序,再分页;如果是联合索引,通过索引筛选出1000w10% 10% *10%=1w,效率提升可想而知!

    转载于:https://www.cnblogs.com/CKhomepage/p/10613618.html

    展开全文
  • 这道题目考察的知识点是MySQL组合索引(复合索引)的最左优先原则。最左前缀匹配原则在mysql建立联合索引时会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配,组合索引的第一个字段必须...

    这道题目考察的知识点是MySQL组合索引(复合索引)的最左优先原则。

    最左前缀匹配原则

    在mysql建立联合索引时会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配,组合索引的第一个字段必须出现在查询组句中,这个索引才会被用到,示例:

    对列col1、列col2和列col3建一个联合索引:

    KEY test_col1_col2_col3on test(col1,col2,col3);

    联合索引test_col1_col2_col3实际建立了(col1)、(col1,col2)、(col,col2,col3)三个索引。

    上面这个查询语句执行时会依照最左前缀匹配原则,检索时会使用索引(col1,col2)进行数据匹配。

    注意

    索引的字段可以是任意顺序的,如:

    所以题目会创建三个索引(plat_order_id)、(plat_order_id与plat_game_id的组合索引)、(plat_order_id、plat_game_id与plat_id的组合索引)。根据最左匹配原则,where语句必须要有plat_order_id才能调用索引(如果没有plat_order_id字段那么一个索引也调用不到),如果同时出现plat_order_id与plat_game_id则会调用两者的组合索引,如果同时出现三者则调用三者的组合索引。

    思考

    对于联合索引(col1,col2,col3),查询语句SELECT * FROM test WHERE col2=2;是否能够触发索引?

    为什么要使用联合索引

    减少开销。建一个联合索引(col1,col2,col3),实际相当于建了(col1),(col1,col2),(col1,col2,col3)三个索引。每多一个索引,都会增加写操作的开销和磁盘空间的开销。对于大量数据的表,使用联合索引会大大的减少开销!

    覆盖索引。对联合索引(col1,col2,col3),如果有如下的sql: select

    col1,col2,col3 from test where col1=1 and

    col2=2。那么MySQL可以直接通过遍历索引取得数据,而无需回表,这减少了很多的随机io操作。减少io操作,特别的随机io其实是dba主要的优化策略。所以,在真正的实际应用中,覆盖索引是主要的提升性能的优化手段之一。

    效率高。索引列越多,通过索引筛选出的数据越少。有1000W条数据的表,有如下sql:select

    from table where col1=1 and col2=2 and

    col3=3,假设假设每个条件可以筛选出10%的数据,如果只有单值索引,那么通过该索引能筛选出1000W10%=100w条数据,然后再回表从100w条数据中找到符合col2=2

    and col3= 3的数据,然后再排序,再分页;如果是联合索引,通过索引筛选出1000w10% 10% *10%=1w,效率提升可想而知!

    展开全文
  • 索引建立的原则用于索引的最好的备选数据是那些出现在WHERE子句、join子句、ORDER BY或GROUP BY子句中的。仅仅出现在SELECT关键字后面的输出数据列表中的数据不是很好的备选SELECTcol_a FROMtbl1 LEFT ...
  • 设计索引的原则(查询优化最重要的,优先权最高的优化就是建立索引) 1搜索的索引,不一定的要选择的列列,换句话说:最适合索引的是出现在where子句中的,或连接子句中指定的,而不是出现在select关键字...
  • 创建联合索引时列的选择原则经常用的列优先(最左匹配原则)离散度高的列优先(离散度高原则)宽度小的列优先(最少空间原则)在Mysql建立多列索引(联合索引)有最左前缀的原则,即最左优先。如果我们建立了一个2列的联合...
  • 经常用的列优先(最左匹配原则) 离散度高的列优先(离散度高原则) 宽度小的列优先(最少空间原则) 在Mysql建立多列索引(联合索引)有最左前缀的原则,即最左优先。如果我们建立了一个2列的联合索引(col1,...
  • Fortran和matlab语言中的多维数组存储方式为列优先原则,内循环最好是列循环;而c语言中的多维数组存储方式为行优先原则,内循环最好是行循环。下面介绍何为行优先存储,何为列优先存储。 例如二维数组Amn (1)...
  • Fortran和 C语言中数组的存储方式

    千次阅读 2012-10-21 12:11:31
    Fortran和matlab语言中的多维数组存储方式为列优先原则,内循环最好是列循环;而c语言中的多维数组存储方式为行优先原则,内循环最好是行循环。下面介绍何为行优先存储,何为列优先存储。  例如二维数组Amn ...
  • 因为Matlab语言中的多维数组存储方式为列优先原则,内循环最好是列循环;而c语言中的多维数组存储方式为行优先原则,内循环最好是行循环。 函数命令:print2darray C语言中创建2维数组 首先需要加载内置了该函数的库...
  • mysql索引选择原则一、...3.3 最左原则总结三、mysql对于索引优先考虑对象1. 简介2. 条件与分组、排序共存的情况下2.1 原因3. 条件与排序共存3.1 原因4. 分组排序共存4.1 原因5. 优化方案四、mysql索引的挑选原则1.索引
  • 广度优先搜索

    2016-02-29 16:15:03
    广度优先搜索,图的遍历   队 (1) 定义  队列也是一种运算受限的线性表。在这种线性表上,插入限定在表的某一端进行,删除限定在表的另一端进行。允许插入的一端称为队尾,允许删除的一端...
  • MySQL数据库设计原则

    2020-04-19 11:13:32
    3.控制数量(字段少而精,字段数建议在 20 以内); 4.平衡范式与冗余(效率优先;往往牺牲范式) 5.拒绝 3B(拒绝大 sql 语句:big sql、拒绝大事务:big transaction、拒绝大批量:big batch); ...
  • 深度优先遍历(Depth First Search),简称DFS,其原则是,沿着一条路径一直找到最深的那个节点,当没有子节点的时候,返回上一级节点,寻找其另外的子节点,继续向下遍历,没有就向上返回一级,直到所有的节点都被...
  • 最左前缀匹配原则在mysql建立联合索引时会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配,示例:对col1、col2和col3建一个联合索引KEY test_col1_col2_col3 on test(...
  • mysql建立多索引有最左前缀的原则,即最左优先,如: 如果有一个2的索引(col1,col2),则已经对(col1)、(col1,col2)上建立了索引; 如果有一个 3现实中,mysql可以根据业务需要建立组合索引,由于mysql使用B-...
  • 最左前缀匹配原则在mysql建立联合索引时会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配,示例:对col1、col2和col3建一个联合索引KEY test_col1_col2_col3 on test(...
  • 索引的最左前缀原则

    2020-12-07 09:33:21
    mysql建立多索引(联合索引)有最左前缀的原则,即最左优先,如: 如果有一个2的索引(col1,col2),则已经对(col1)、(col1,col2)上建立了索引; 如果有一个3索引(col1,col2,col3),则已经对(col1)、(col1,col2)...
  • 最左前缀匹配原则在mysql建立联合索引时会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配,示例:对col1、col2和col3建一个联合索引KEY test_col1_col2_col3 on test(...
  • MYSQL数据库设计原则

    2019-08-14 19:51:32
    控制数量(字段少而精,字段数建议在20以内); 平衡范式与冗余(效率优先;往往牺牲范式) 拒绝3B(拒绝大sql语句:big sql、拒绝大事务:big transaction、拒绝大批量:big batch); 2、字段类原则 用好数值类型(用...
  • 联合索引左前缀原则

    2019-05-13 17:32:05
    在mysql建立联合索引时会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配,示例: 对col1、col2和col3建一个联合索引 1 KEY test_col1_col2_col3 on test(col1,...
  • zoj3284Matrix Processing(二维树状数组)

    千次阅读 2014-01-12 16:44:33
    op = 1:按列优先原则从(x1,y1)到(x2,y2)所有元素都加上k。 op = 2:查询(x,y)处元素值。 题目分析:矩阵不大,但是查询很多。暴力会超时。于是高兴的写了一个二维线段树,结果华丽丽的TLE了。然后又不断调整姿势...
  • mysql建立多索引有最左前缀的原则,即最左优先,如:如果有一个2的索引(col1,col2),则已经对(col1)、(col1,col2)上建立了索引;如果有一个3索引(col1,col2,col3),则已经对(col1)、(col1,col2)和(col1,col2,...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 190
精华内容 76
关键字:

列优先原则