zoukankan      html  css  js  c++  java
  • MySQL学习之索引(二)

    高性能的索引策略

    Isolating the Column

    孤立列就是说,这一列不能在表达示中或在一个函数里面,如

    mysql> SELECT actor_id FROM actor WHERE actor_id + 1 = 5; 错误

    再如:

    mysql> SELECT ... WHERE TO_DAYS(CURRENT_DATE) - TO_DAYS(date_col) <= 10;

    Prefix Indexes and Index Selectivity

    当你索引一个非常长的字符串时,你的索引会变大变慢,这时你可以只索引字符串前面几个字符,但这会导致你的索引的“选择性”降低。

    索引选择性(Index Selectivity)是唯一索引数/总行数(#T),大小从1/#T到1.

    如果你索引的列是BLOB、TEXT或是很长的VARCHAR,那么MySQL会强制你使用前缀索引。

    问题在于:如何找到最合适的前缀长度。

    假设有一张城市的表,你要对城市名称做索引

    那么

    mysql> SELECT COUNT(*) as cnt, city

    -> FROM city_demo GROUP BY city ORDER BY cnt DESC LIMIT 10;

    得到这样的结果。

    现在我们试着找出前缀的出现频率

    mysql> SELECT COUNT(*) cnt, LEFT(city, 3) AS pref

    -> FROM city_demo GROUP BY pref ORDER BY cnt LIMIT 10;

    每个前缀出的出镜率都很高,这时我们加长前缀的长度

    mysql> SELECT COUNT(*) AS cnt, LEFT(city, 7) AS pref
    -> FROM sakila.city_demo GROUP BY pref ORDER BY cnt DESC LIMIT 10;

    这时前缀索引的频率已经和完全索引差不多,我们认为这是个不错的长度。

    前缀索引的缺点:无法在ORDER BY 和 GROUP BY查询中被使用,也不能把它们做为covering indexes来使用。

  • 相关阅读:
    默比乌斯函数
    勒让德符号相关
    微积分入门("SX"T版)
    分治法求2n个数的中位数
    SSM框架学习之高并发秒杀业务--笔记1-- 项目的创建和依赖
    10月9日Android学习笔记:活动与服务之间的通信
    高精度加法
    Windows环境下多线程编程原理与应用读书笔记(4)————线程间通信概述
    郁闷
    素数链
  • 原文地址:https://www.cnblogs.com/hugmyloneliness/p/3642300.html
Copyright © 2011-2022 走看看