mysql 索引

索引是一种特殊文件(InnoDB数据表上的索引是表空间的一部分组成),它们包含这对数据表里所有记录的引用指针

通俗的讲,数据库的引用好比是一本书的目录,能加快数据库的查询速度

 

索引demo:

-- 创建一个测试表test_index
create table test_index(title varchar(10));

-- 向表中写入10万条数据

from pymysql import connect

conn = connect(host="localhost",port=3306,user="root",password="",database="jing_dong",charset="utf8")
cs1 = conn.cursor()

for i in range(100000):
    cs1.execute("insert into test_index values('ha-%d')" % i)

conn.commit()


--  开启运行时间检测
set profiling=1;

-- 查找第10万条数据
select * from test_index where title="ha-99999";

-- 查看执行时间,这里大概是0.4秒
show profiles;

-- 为表title_index表的title列创建索引,varchar类型的列后面加上一个长度,这里是10,整数列可以不用
create index index_test on test_index(title(10));
-- 创建索引语句:create index,索引名字是index_test,on后面是关联的test_index表中的title列,列长度是10

-- 再次查找第十万条数据:
select * from test_index where title="ha-99999";

-- 查看运行时间,这里大概是0.0006秒
show profiles

-- 查看索引
show index from 表名

-- 创建索引 字段名后面的长度,如果是字符串(char,varchar)就指定长度,非字符串则不用
create index 索引名 on 表名(字段名(长度)) 

-- 删除索引
drop index 索引名 on 表名

-- 主键、外键 mysql默认建立索引

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

 

posted @ 2019-01-29 09:48  greenfan  阅读(83)  评论(0)    收藏  举报