Heim  >  Artikel  >  Backend-Entwicklung  >  mysql 的一个sql 语句 优化

mysql 的一个sql 语句 优化

WBOY
WBOYOriginal
2016-06-23 14:23:22955Durchsuche

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:自动修复crashed的数据表Nächster Artikel:socket多用户连接求助