首先用的机房电脑性能比较差所以就不横向比较了……
数据库作业,数据量是500w条,表结构很简单people(id,name,sex,age)
搜索姓刘的人 SELECT * FROM `people` where `name` LIKE '刘%'
建立索引之前:
建立索引之后:
明显看出第二个是使用了索引的因为按照姓名排序了
但是时间……一个10s多一个50s多
为什么?

解决方案 »

  1.   

    以文本方式贴出  不要贴截图
    explain select ...
    show index from ..
    以供分析。
      

  2.   


    贴出执行计划。照理500w数据,查出1w多的数据,用索引可以大大提高性能,因为选择性很强。
    而且LIKE '刘%'的 写法,确实页能用上索引。
      

  3.   

    额额昨天在机房的电脑恐怕 有毒,不过我的确是explain过 的,第一个没用索引第二个用了索引
      

  4.   

    可不可以把表结构也贴出来,我感觉是不是这个名字字段太长了,索引太大
    导致range搜索索引效率明显下降,感觉这个表最大的字段应该就是名字这个字段了,如果是的话:这个名字字段所占空间基本可以等于表大小,是不是这样引起的?
      

  5.   


    你试试把name那个索引删掉之后,再重新创建,然后再查试试
      

  6.   


    看查询结果只占1%不到,肯定用索引快,目前慢就需要如下排查:
    1、select的时候请带上SQL_NO_CACHE,防止查询缓存导致结果差异;
    2、重建索引,索引长度值10,如nameindex(name(10));
    2、使用OPTIMIZE TABLE people,然后再查询试试,如果还慢继续往下;
    3、检查表的存储引擎相关索引缓存配置是否太小;
      

  7.   

    等mysql8直方图出来。感觉在优化器这块mysql还要多多努力
      

  8.   

    选择率问题id,name加联合索引
      

  9.   

    说说我自己的看法,不对勿喷。
    建立索引的列,不建议用or和like关键字。像这种情况你用SUBSTRING(`name`,1,1) IN ('张') 试下