Heim > Artikel > Backend-Entwicklung > mysql 的一个sql 语句 优化
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_是什么意思