zoukankan      html  css  js  c++  java
  • mysql 索引使用教程

    1.什么索引

      索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的位置信息。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度.

    2.索引工作原理

      除了词典,生活中随处可见索引的例子,如火车站的车次表、图书的目录等。它们的原理都是一样的,通过不断的缩小想要获得数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是我们总是通过同一种查找方式来锁定数据。

      数据库也是一样,但显然要复杂许多,因为不仅面临着等值查询,还有范围查询(>、<、between、in)、模糊查询(like)、并集查询(or)等等。数据库应该选择怎么样的方式来应对所有的问题呢?我们回想字典的例子,能不能把数据分成段,然后分段查询呢?最简单的如果1000条数据,1到100分成第一段,101到200分成第二段,201到300分成第三段……这样查第250条数据,只要找第三段就可以了,一下子去除了90%的无效数据。

    3.查看一个表中是否已经创建索引

    show index from 表名;
    

    4.创建索引(如果指定字段是字符串,需要指定长度,建议长度与定义字段时的长度一致,字段类型如果不是字符串,可以不填写长度部分)

    create index 索引名 on 数据表(字段名称长度)
    

    5.删除索引

    drop index 索引名称 on 数据表
    

    6.测试数据表是否能加快查询速度

    6.1创建一个数据表

    create table my_index(title varchar(10));
    

    6.2 插入数据

    from pymysql import connect
    
    def main():
        # 创建Connection连接
        conn = connect(host='localhost',port=3306,database='python_test_1',user='root',password='xu666666',charset='utf8')
        # 获得Cursor对象
        cursor = conn.cursor()
        # 插入10万次数据
        for i in range(100000):
            cursor.execute("insert into my_index values('ha-%d')" % i)
        # 提交数据
        conn.commit()
    
    if __name__ == "__main__":
        main()
    

    6.3 开始查询并启动时间检测

    • 开启运行时间监测:
    set profiling=1;
    • 查找第1万条数据ha-99999
    select * from my_index where title='ha-99999';
    • 查看执行的时间:
    show profiles;
    • 为表title_index的title列创建索引:
    create index test_index on my_index(title(10));
    • 执行查询语句:
    select * from my_index where title='ha-99999';
    • 再次查看执行的时间
    show profiles;
    

    6.4 测试结果

          

    注意

      1.索引可以明显提高某些字段的查询效率,但不能加快插入,更新,删除数据的效率,相反由于每次数据表数据的更改都会让索引重新排列,会降低效率

      2.要注意的是,建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索引文件。对于一个经常需要更新和插入的表格,就没有必要为一个很少使用的where字句单独建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。建立索引会占用磁盘空间。

        3. 建立索引要创建在常用的查询字段上,并且根据自己的需求建立说因数量

     

  • 相关阅读:
    LeetCode 242. Valid Anagram (验证变位词)
    LeetCode 205. Isomorphic Strings (同构字符串)
    LeetCode 204. Count Primes (质数的个数)
    LeetCode 202. Happy Number (快乐数字)
    LeetCode 170. Two Sum III
    LeetCode 136. Single Number (落单的数)
    LeetCode 697. Degree of an Array (数组的度)
    LeetCode 695. Max Area of Island (岛的最大区域)
    Spark中的键值对操作
    各种排序算法总结
  • 原文地址:https://www.cnblogs.com/xuchuankun/p/9451495.html
Copyright © 2011-2022 走看看