当前位置:Gxlcms > PHP教程 > mysql的一个sql语句优化

mysql的一个sql语句优化

时间:2021-07-01 10:21:17 帮助过:12人阅读

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_是什么意思

人气教程排行