索引
1. 思考
在图书馆中是如何找到一本书的?
一般的应用系统对比数据库的读写比例在10:1左右(即有10次查询操作时有1次写的操作),
而且插入操作和更新操作很少出现性能问题,
遇到最多、最容易出问题还是一些复杂的查询操作,所以查询语句的优化显然是重中之重
2. 解决办法
当数据库中数据量很大时,查找数据会变得很慢
优化方案:索引
3. 索引是什么
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度
4. 索引目的
索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql。如果没有索引,那么你可能需要把所有单词看一遍才能找到你想要的,如果我想找到m开头的单词呢?或者ze开头的单词呢?是不是觉得如果没有索引,这个事情根本无法完成?
5. 索引的使用
查看索引
showindexfrom表名;
创建索引
如果指定字段是字符串,需要指定长度,建议长度与定义字段时的长度一致
字段类型如果不是字符串,可以不填写长度部分
createindex索引名称on表名(字段名称(长度))
删除索引:
dropindex索引名称on表名;
6. 索引demo
6.1. 创建测试表testindex
createtabletest_index(titlevarchar(10));
6.2 使用 source 命令,导入十万条数据
# 备份的命令# mysqldump -uroot -p python_test_1 > python_test.sql# 执行 .sql 文件的内容source D:/MYSQL/bin/python_test.sql
6.3. 查询
开启运行时间监测:
setprofiling=1;
查找第1万条数据ha-99999
select*fromtest_indexwheretitle='ha-99999';
查看执行的时间:
showprofiles;
为表title_index的title列创建索引:
createindextitle_indexontest_index(title(10));
执行查询语句:
select*fromtest_indexwheretitle='ha-99999';
再次查看执行的时间
showprofiles;
7. 注意:
要注意的是,建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索引文件。对于一个经常需要更新和插入的表格,就没有必要为一个很少使用的where字句单独建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。
建立索引会占用磁盘空间
网友评论