select-Mysql添加索引后的查询失败问题

问题描述

Mysql添加索引后的查询失败问题
sql语句如下:

.

select blog0_.blogId as blogId5_ blog0_.className as className5_ blog0_.title as title5_ blog0_.content as content5_ blog0_.createDate as createDate5_ blog0_.pictureSum as pictureSum5_ blog0_.adminId as adminId5_ from blog blog0_ where 1=1 and blog0_.className=1 order by blog0_.blogId DESC limit 110;

.

索引在className上。

.

未建立索引前该语句可以查询出需要的数据;

.

建立索引之后该语句只能执行出 0 rows;

.

然后开始explain,发现是走了索引的,但却没有拿到数据。

.

把select * 换成select abcd from 。。。之后,找到了问题出现的地方:

.

数据表中有一列数据remark是text类型,如果用select * 或select abcremark。。。进行查询的话,就直接查到了0条数据。

.

如果select的时候不加remark这一列,就能正常完成查询。

.

那么问题来了,我不可能不用remark这一列的,也不可能改动表说把remark这一列挪到新的一张表中。

.

好了小伙伴们,我只想SELECT * FROM xxx_blog where className = 1 ORDER BY blogId DESC LIMIT 110;这条语句可以正常执行,到底有什么办法解决问题呢?

解决方案

sql语句如下:
.
select blog0_.blogId as blogId5_ blog0_.className as className5_ blog0_.title as title5_ blog0_.content as content5_ blog0_.createDate as createDate5_ blog0_.pictureSum as pictureSum5_ blog0_.adminId as adminId5_ from blog blog0_ where 1=1 and blog0_.className=1 order by blog0_.blogId DESC limit 110;
.
在className字段下加了索引之后,sql语句就搜不到结果了。未添加索引之前是正常运行的。
.
后来发现如果把order by 语句删除,添加索引之后的sql一样能搜索到结果。
.
求大神指导到底是什么情况?

答:索引只会影响sql的执行效率,不会影响执行结果,也有可能是你的索引建的有问题,删除以后重新建试试

解决方案二:
用explain观察下看看

解决方案三:
order by 只是影响排序,不会影响结果,可以把sql执行的完整过程贴一下

时间: 2025-01-30 11:05:53

select-Mysql添加索引后的查询失败问题的相关文章

mysql 添加索引 mysql 如何创建索引_Mysql

1.添加PRIMARY KEY(主键索引) mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索引) mysql>ALTER TABLE `table_name` ADD UNIQUE ( `column` ) 3.添加INDEX(普通索引) mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) 4.添加FULLTEX

MySQL创建索引

MySQL创建索引 如果你在查询时常用类似以下的语句: SELECT * FROM mytable WHERE category_id=1; 最直接的应对之道,是为category_id建立一个简单的索引: CREATE INDEX mytable_categoryid ON mytable (category_id); OK,搞定?先别高兴,如果你有不止一个选择条件呢?例如: SELECT * FROM mytable WHERE category_id=1 AND user_id=2; 你的

MySQL 通过索引优化含ORDER BY的语句_Mysql

关于建立索引的几个准则: 1.合理的建立索引能够加速数据读取效率,不合理的建立索引反而会拖慢数据库的响应速度. 2.索引越多,更新数据的速度越慢. 3.尽量在采用MyIsam作为引擎的时候使用索引(因为MySQL以BTree存储索引),而不是InnoDB.但MyISAM不支持Transcation. 4.当你的程序和数据库结构/SQL语句已经优化到无法优化的程度,而程序瓶颈并不能顺利解决,那就是应该考虑使用诸如memcached这样的分布式缓存系统的时候了. 5.习惯和强迫自己用EXPLAIN来

MySQL 第六篇:索引与子查询

我把MySQL的内容整理成9篇博客,学完这9篇博客虽不能说能成为大神,但是应付一般中小企业的开发已经足够了,有疑问或建议的欢迎留言讨论. 子查询 子查询,从原有的查询语句中 嵌入新的查询 来得到我们想要的结果,也可称为嵌套查询. 一.where 型 1.查询课程名为"Java"的学生信息 -- 使用关联查询实现 SELECT s.* FROM students s, class c WHERE s.class_id = c.class_id AND c.class_name = 'JA

mysql 搜索时,怎么做拆词查询,php实验拆词我已经做到了,问题在拆了词后怎么查询数据库

问题描述 mysql 搜索时,怎么做拆词查询,php实验拆词我已经做到了,问题在拆了词后怎么查询数据库 mysql 搜索时,怎么好似百度搜索那样做查询,php拆词我已经做到了,问题在拆了词后怎么查询数据库,用的是mysql,如下图,想做到下面的效果 解决方案 不太明白问题原因?不是用like模糊查找吗? 解决方案二: 拆分为多个关键词之后就用多个Like OR Like 查询 解决方案三: 参考:http://www.linuxidc.com/Linux/2013-04/82511.htm

在vb.net中数据源中添加数据库后怎么可以写select语句

问题描述 在vs2012中的vb.net中数据源中添加数据库后应该怎么样做才能在代码中select语句 解决方案 解决方案二:为什么要在代码中写select如果要筛选为什么不用view.活在在datatable上用select?解决方案三:view怎么用?解决方案四:dimtableasdatatabledimvueasnewdataview(table)vue.sort="xxx,xxx,xxx"'排序vue.sort="xxxdesc"vue.rowFilter

MySQL数据库索引使用方法

  走向精通MySQL的道路非常的艰难,还好各种关系型数据库大同小异,足够让我从增删改查上升到高性能数据库的架构和调优.这期间的各种概念就不絮叨了,我也很难表述的很清楚,昨天写了个小脚本往我本机MySQL数据库的某张表里面注入了200万条数据(Windows7旗舰版/1.66GHz/2G内存/MySQL5.1.50),数据表的结构如下图所示,属于一个比较基本的定长表,考虑到我可怜的本本的承受能力,id使用从1开始的自增,title字段为随机20个标题中的一个,content都是相同的内容,tim

mysql联合索引

命名规则:表名_字段名1.需要加索引的字段,要在where条件中2.数据量少的字段不需要加索引3.如果where条件中是OR关系,加索引不起作用4.符合最左原则 https://segmentfault.com/q/1010000003984016/a-1020000003984281 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c

EXPLAIN sql优化方法(1) 添加索引

添加索引优化器更高效率地执行语句  假设我们有两个数据表t1和t2,每个有1000行,包含的值从1到1000.下面的查询查找出两个表中值相同的数据行: Java代码   mysql> SELECT t1.i1, t2.i2 FROM t1, t2 WHERE t1.i1 = t2.i2;   +------+------+   | i1 | i2 |   +------+------+   | 1 | 1 |   | 2 | 2 |   | 3 | 3 |   | 4 | 4 |   | 5 |