索引
一般的应用对数据库大部分操作都是查询,所以查询速度显得尤为重要。
当数据库中数据量很大时,查找数据会变得很慢,这个时候就需要做相应的优化处理。
建立索引一个有效的优化方案:
索引就好比一本书的目录,它会让你更快的找到内容,显然目录(索引)并不是越多越好,假如这本书1000页,有500也是目录,它当然效率低,目录是要占纸张的,而索引是要占磁盘空间的。
选择索引的数据类型:
越小的数据类型越好,越小的数据类型通常在磁盘、内存和CPU缓存中都需要更少的空间,处理起来更快。 简单的数据类型更好,整型数据比起字符串,处理开销更小,因为字符串的比较更复杂。
Mysql常见索引有:主键索引、唯一索引、普通索引、全文索引、组合索引
创建索引
PRIMARY KEY(主键索引):
alter table 表名 add primary key (列名);
UNIQUE(唯一索引):
alter table 表名 add unique (列名);
INDEX(普通索引):
alter table 表名 add index 索引名称 (列名);
FULLTEXT(全文索引):
alter table add fulltext (列名);
组合索引:
alter table 表名 add index 索引名 (列1,列2,列2);
查看索引
show index from 表名;
删除索引
drop index 索引名 on 表名;
查询测试
创建一个表myindex表,向里面插入50万条数据
create table myindex(
id int auto_increment primary key not null,
test varchar(10)
)
写一段python脚本插入将50万条数据插入
# coding=utf-8
from pymysql import *
conn = connect(host='127.0.0.1',port=3306,database='python',user='root',password='mysql',charset='utf8')
cs1=conn.cursor()
for i in range(0,500000):
str_ = 'test' +str(i)
sql = "insert into myindex values(0,%s);"
cs1.execute(sql,[str_])
conn.commit()
cs1.close()
conn.close()
创建好表之后开始查询不建索引与建立索引需要的时间,
开始时间检测
set profiling=1;
没有给test字段创建索引的时候,查找第400000条数据
select * from myindex where test='test400000';
查看执行时间
show profiles;
建立索引
alter table myindex add index index_name test;
查找第400000条数据
select * from myindex where test='test400000';
查看执行时间
show profiles;