蓝盟IT小贴士,来喽!
索引是索引的作用
索引类型
高性能索引策略
索引设计标准:三星索引
我们在新华辞典查特定的词语(例如“先”的意思时,常带着新华辞典查,从头到尾可以查各页是否有“先”这个词。 这样可以确实找到(与数据库的全表扫描相对应),但效率肯定非常低。 更有效率的人相信,他们知道首先在主页索引中找到与“目标”相对应的页数,然后直接跳转到相应的页面进行搜索。 这样,搜索的时间大幅减少,可以作为O(1)。
数据库中的索引也是如此,通过导航到通过索引导入的页面,扫描行数大大减少,效率大大提高。 简而言之,索引主要发挥以下作用:
即,如上所述,索引能够大幅度减少扫描行数
索引有助于服务器避免排序和临时表
索引可以将随机IO转变成序列IO
第一个就像已经说明过的那样,看看第二个和第三个吧
让我们先看看第二个。 如果不使用索引,请尝试执行以下语句
MySQL流扫描所有行,将所有行加载到内存中,然后按age排序生成临时表,对该表进行排序,然后将相应的行返回给客户机,这样做更糟糕。 如果该临时表的大小大于tmp_table_size的值(缺省值为16 M ),则内存临时表将更改为磁盘临时表,性能将进一步恶化,并且索引已被索引,则索引本身从有序磁盘读取的行数由于不会生成临时表,因此无需多馀的排序,性能肯定会得到改善。
看看随机IO和顺序IO。 首先,我要说明这两个概念。
相信很多人都吃过旋转锅,服务员会把盘子里的菜放进旋转传送带里,直到这些菜在我们面前转来转去,我们才能拿到菜。 如果一周需要4分钟的话,最短等待时间是0 (即料理在你面前),最长等待时间是4分钟(如果料理正好在你面前),平均等待时间是2分钟,我们现在有4盘料理。这4盘料理被随机分配给传送带。 得知这4盘菜的平均等待时间是8分钟(随机IO ),这4盘菜正好排列的话,等待时间只需要2分钟(顺序IO )。
文/上海蓝盟 IT外包专家