• MySql 前缀索引


    create by:关彦明
    create time:2016-05-24
    -------------------------------------------------------------------------
    前缀索引长度的可选择性
    温故而知新,上班前几分钟,拿起新买的【高性能MySQL】一书,随手翻看,是一段讲前缀索引的,
    之前的记忆里,只有用到列索引,没有用过前缀索引,前缀到底要建多长才合适呢?在什么场景下适用呢?带着问题继续看。
    长度是可以根据现有数据计算出来的,计算SQL1:
    SELECT COUNT(DISTINCT colName)/COUNT(*) FROM tableName
    再用查询语句2计算值对比值:
    SELECT COUNT(DISTINCT LEFT(colName,5))/COUNT(*) FROM tableName
    可以多次修改变量“5”来执行计算出最接近SQL1计算的值,那么这个变量就是前缀索引长度可选择性最佳值

    创建前缀索引:
    ALTER TABLE tableName ADD KEY (colName(7))
    -- 这里的7是通过计算得来的长度
    前缀索引的好处:
    使索引更小,执行更快

    前缀索引的缺点:
    无法使用前缀索引做GROUP BY和ORDER BY,也无法使用前缀索引做覆盖扫描。
     
    前缀索引应用场景:
    1、在一个32位长度字符串ID列上使用8到16位长度的前缀索引,能显著提升性能。
    2、后缀索引,MySql里不支持后缀索引,但我们可以反转存储再使用前缀索引,比如查找某个域名的邮件地址(如*@163.com)
     
    计算转义的列名:
    今天才知道MySql计算列转义后的列名可以用在GROUP BY、HAVING、ORDER BY里,如:
    SELECT LEFT(colName,7) AS newName, COUNT(0) AS amount
    FROM tableName GROUP BY newName  HAVING amount > 1 ORDER BY  amount DESC , newName ASC
    转义后的newName,可以在GROUP BY里引用,也可以在ORDER BY里引用
    而在SQL Server中 是不能这么写的,只能GROUP BY LEFT(colName,7),以前使用SQL Server多,现在用MySql,
    所以很多SQL习惯还是SQL Server的写法,特性的使用还得再深入啊,要不然性能低下还少了好多乐趣。
     
    转载请注明原文地址:http://www.cnblogs.com/guanym/p/5522368.html                       
  • 相关阅读:
    QT:不规则窗口的实现
    Sql Server (错误:7302)
    Qt源码分析之信号和槽机制
    Linux下如何发布Qt程序
    QT程序制作deb包并安装在应用程序菜单
    Another Look at Events(再谈Events)
    Qt全局热键(windows篇)(使用RegisterHotKey和句柄进行注册)
    新浪微博回归平静
    Qt中 QString 和int, char等的“相互”转换,关键是QString.toLocal8Bit().data();
    QT中异形窗口的绘制(winEvent处理WM_NCHITTEST消息)
  • 原文地址:https://www.cnblogs.com/guanym/p/5522368.html
Copyright © 2020-2023  润新知