3.尽量选择区分度高的列作为索引 , 区分度的公式是count(distinct col)/count(*) , 表示字段不重复的比例 , 比例越大我们扫描的记录数越少 , 唯一键的区分度是1 , 而一些状态、性别字段可能在大数据面前区分度就是0 , 那可能有人会问 , 这个比例有什么经验值吗?使用场景不同 , 这个值也很难确定 , 一般需要join的字段我们都要求是0.1以上 , 即平均1条扫描10条记录 。
4.索引列不能参与计算 , 保持列“干净” , 比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引 , 原因很简单 , b+树中存的都是数据表中的字段值 , 但进行检索时 , 需要把所有元素都应用函数才能比较 , 显然成本太大 。所以语句应该写成create_time = unix_timestamp(’2014-05-29’) 。
5.尽量的扩展索引 , 不要新建索引 。比如表中已经有a的索引 , 现在要加(a,b)的索引 , 那么只需要修改原来的索引即可 。
推荐阅读
- Google SEO 系列 - 搜索引擎原理
- MySQL、SQL Server、Oracle对比,你必须了解的三大数据库区别
- MySQL 百万级数据量分页查询方法及其优化
- Python连接MySQL数据库方法介绍
- 谷歌工具——关键字规划师的操作指南和工作原理
- MySQL高压缩引擎TokuDB 揭秘
- js中几种实用的跨域方法原理详解
- 流量生态矩阵:搜索引擎的流量突围之战
- 自动感应水龙头怎么样 自动感应水龙头工作原理
- 如何创建MySQL用户帐户和授予权限
