欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

mysql 的一个sql 语句 优化

程序员文章站 2022-06-12 22:28:29
...
SELECT t_wenzhang.contents, t_wenzhang.createTime, t_wenzhang.title,t_wenzhang.pagePath FROM t_wenzhang LEFT JOIN t_keys ON t_keys.id = t_wenzhang.keyword where SUBSTRING( KeyP, 1, 1 )='" + zimu + "' order by createTime desc






上面t_wenzhang 表4W 数据,t_keys 3W,怎么这个执行10+秒!如果和优化!

回复讨论(解决方案)

首先是对t_keys.id,t_wenzhang.keyword,KeyP,zimu这4个字段建立索引
其次如果还是慢可以试着改变一下引擎
最后可以用explan来帮助选择更好的索引和写出更优化的查询语句!

首先是对t_keys.id,t_wenzhang.keyword,KeyP,zimu这4个字段建立索引
其次如果还是慢可以试着改变一下引擎
最后可以用explan来帮助选择更好的索引和写出更优化的查询语句!


4W 数据 联合,怎么会这么慢?

主要就是索引与优化没做好(特别是索引),当然,跟你的字段的长度也有所关系

好的设计比好sql 好,不要太依靠sql 可以去了解nosql数据库 对以后用sql有非常大帮助,我现在基本一般不会去用左连接查询了。 你这是文字查询出文章的key?

合理优化表的索引,关键连接表的id加上索引。
where SUBSTRING( KeyP, 1, 1 )='" + zimu + "' 引起查询变慢,贴出表结构看看。

SUBSTRING( KeyP, 1, 1 )='" + zimu + "'
不会使用索引,应写作这样
KeyP like '" + zimu + "%'

合理优化表的索引,关键连接表的id加上索引。
where SUBSTRING( KeyP, 1, 1 )='" + zimu + "' 引起查询变慢,贴出表结构看看。

上面对t_wenzhang. 下面是 t_keys

SUBSTRING( KeyP, 1, 1 )='" + zimu + "'
不会使用索引,应写作这样
KeyP like '" + zimu + "%' 我要第一个字母 相等的,比如=a

实在不行还不如先建立一个临时表,查询完再删掉!这样效率快多了!

第一个字母相等就用:
like 'a%'

按照这个方法试下
SUBSTRING( KeyP, 1, 1 )='" + zimu + "'
不会使用索引,应写作这样
KeyP like '" + zimu + "%'
如果不行,请问楼主是在服务器上测试还是本地,如果是服务器上可以尝试建立“存储过程”。
create procedure...

主要原因还是因为使用SUBSTRING函数,导致KeyP索引失效,换成"like '".zimu ."%'" 建立KeyP的索引,速度会提高很多。

如果索引都建了,主要原因就是在where条件中用了函数,同时也导致每次查询都不会被缓存,再就是join查询要小结果集驱动大结果集

是mysql吗?
SUBSTRING( KeyP, 1, 1 )='" + zimu + "' 这里是php混着吧? 应该是 +$zimu+ 这样?
改成 KeyP like '{$zimu}%' 或者 KeyP like '"+$zimu+"%'

t_keys.id 应该已有索引(主键)
t_wenzhang.keyword加索引
createTime 加索引
KeyP也加索引(可以加长度为1的索引)

然后, 就没问题了

也不用left join了, join即可

t_是什么意思