首先用的机房电脑性能比较差所以就不横向比较了……
数据库作业,数据量是500w条,表结构很简单people(id,name,sex,age)
搜索姓刘的人 SELECT * FROM `people` where `name` LIKE '刘%'
建立索引之前:
建立索引之后:
明显看出第二个是使用了索引的因为按照姓名排序了
但是时间……一个10s多一个50s多
为什么?
数据库作业,数据量是500w条,表结构很简单people(id,name,sex,age)
搜索姓刘的人 SELECT * FROM `people` where `name` LIKE '刘%'
建立索引之前:
建立索引之后:
明显看出第二个是使用了索引的因为按照姓名排序了
但是时间……一个10s多一个50s多
为什么?
解决方案 »
- 大牛请进,mysql插入一条记录,插入的主键值与主键自增数值不一致的问题?
- 关于:c语言调用mysqlAPI执行存储过程发生错误:select Commands out of sync
- 存储过程
- 请教一个问题!
- JSP遍历及定位MYSQL数据库的程序出错了
- delete from password n where n.user_id in(select n.user_id from password n where n.uid='3584');
- MYSQL 中文排序
- 刚要学MySQL,问一个比较弱智的问题
- 急!在线等!如何获得mysql里所有的表!
- 如何Mysql的命令行插blob数据..
- MYSQL5.7基于ROW模式日志,怎么进行数据恢复
- mysql如何导入2GB大的里面含有7个表的.xml数据文件
explain select ...
show index from ..
以供分析。
贴出执行计划。照理500w数据,查出1w多的数据,用索引可以大大提高性能,因为选择性很强。
而且LIKE '刘%'的 写法,确实页能用上索引。
导致range搜索索引效率明显下降,感觉这个表最大的字段应该就是名字这个字段了,如果是的话:这个名字字段所占空间基本可以等于表大小,是不是这样引起的?
你试试把name那个索引删掉之后,再重新创建,然后再查试试
看查询结果只占1%不到,肯定用索引快,目前慢就需要如下排查:
1、select的时候请带上SQL_NO_CACHE,防止查询缓存导致结果差异;
2、重建索引,索引长度值10,如nameindex(name(10));
2、使用OPTIMIZE TABLE people,然后再查询试试,如果还慢继续往下;
3、检查表的存储引擎相关索引缓存配置是否太小;
建立索引的列,不建议用or和like关键字。像这种情况你用SUBSTRING(`name`,1,1) IN ('张') 试下