情况:
新人刚到公司,领导丢了一个有300W条的库给我,一共两个表。
要实现多表查询,涉及到12个字段,我现在开了索引,查一条大概要1分钟。
但是领导要求把速度提起来,因小菜出入职场,跪求各位大神给传点经验~~~,谢谢啦~~
新人刚到公司,领导丢了一个有300W条的库给我,一共两个表。
要实现多表查询,涉及到12个字段,我现在开了索引,查一条大概要1分钟。
但是领导要求把速度提起来,因小菜出入职场,跪求各位大神给传点经验~~~,谢谢啦~~
|
1
$app = $model->table('user a,vipuser c')
->where("a.username=c.vipUser and a.trueName=c.trueName and CONCAT(a.username,a.trueName) LIKE '%$keyword%' or a.numNo = '{$keyword}'") ->field('a.username,a.vipUser,a.Age,a.numNo,a.money,a.Sex,a.Address,a.Home,a.City,a.regTime,c.Phone,c.Email') ->select(); $this->assign('app',$app); $this->display('index'); 这是现在的语句,我用的thinkphp |
|
SuanlatangApr 15, 2014 via iPhone
2
同关注下 好多被脱裤的资料查起来很麻烦
|
|
WildCatApr 15, 2014 via iPhone
3
SQL里如果用 WHERE ... AND ... 引擎会不使用索引的
http://blog.csdn.net/gzh0222/article/details/6661779 http://www.cnblogs.com/hlxs/archive/2012/05/07/2487082.html 今天刚学到 |
|
tobyleeApr 16, 2014
5
重点在这里CONCAT(a.username,a.trueName) LIKE '%$keyword%'
|
|
zzNuckerApr 16, 2014
6
where子句里最好不要有函数操作。。。
|
|
vibbowApr 16, 2014
7
一个 LIKE '%KEYWORD%'
性能怎么可能起来... |
|
manhereApr 16, 2014
10
explain下看看哇
|
|
11138Apr 16, 2014
11
优化的方向就是简化查询条件,一定要用上索引,用EXPLAIN分析一下;如果可以,建立一些临时表(定期维护)。。。
加上你现在提供的资料有限,也见不得能得到什么有用的建议。 |
|
12
user a,vipuser c
a.username=c.vipUser and a.trueName=c.trueName and CONCAT(a.username,a.trueName) LIKE '%$keyword%' or a.numNo = '{$keyword}' 'a.username,a.vipUser,a.Age,a.numNo,a.money,a.Sex,a.Address,a.Home,a.City,a.regTime,c.Phone,c.Email' 这样的查询条件,如果要优化的话,试试创建临时表? 首先查询 a.numNo = keyword,这个应该是很快的,如果有索引的话 其次是搜索 a.username和a.truename 的LIKE。 我不知道为什么要CONCAT,不过如果一个人username叫aaa,truename叫bbb,期望搜索ab时能搜到这条记录吗?如果不是的话拆成两条语句。 最后给临时表插上索引,然后在和c表做内连接。 至少我觉得这样会快很多。 |
|
13
类似这样的顺序
CREATE TEMPORARY TABLE IF NOT EXISTS #RANDOM_NAME (INDEX(username, trueName)) AS ( SELECT * FROM user WHERE numNo = ?keyword ) INSERT INTO #RANDOM_NAME SELECT * FROM user WHERE username LIKE ?keyword-like INSERT INTO #RANDOM_NAME SELECT * FROM user WHERE trueName LIKE ?keyword-like SELECT ... ... ... FROM #RANDOM_NAME a, vipuser c WHERE ... = ... AND ... = ... |
|
15
@tobylee 这位已经说的比较清楚了我觉得。。。lz explain下八。。。
|
|
16
|
|
wzzyj8Apr 16, 2014
17
提升硬件也是解决途径之一,又或者是用RAM Database
|
|
11138Apr 17, 2014
20
很明显啊,表A没用到索引,慢是应该的。
|
|
konakonaApr 17, 2014
21
在功能里,优化SQL已经不能起到多少作用。
考虑采取减轻数据表压力的做法,如View、事务等。 我打个比方: A功能日均hits达到10w以上,考虑: 1.分布式(require) 2.将常用的表结果缓存(memcached) 3.如果含搜搜需求(where条件叫复杂时或含有like),将每一个搜索结果另外存储至视图中 等等等等 |