首頁 >後端開發 >php教程 >mysql 的一个sql 语句 优化

mysql 的一个sql 语句 优化

WBOY
WBOY原創
2016-06-23 14:23:22978瀏覽

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn