问个数据表联合查询的问题,用的是Mysql数据库,我先把SQL语句列出来。
select c.name from plsm_8100.characters c inner join plsm_8100.account_data a where a.id=c.account_id and c.name like '%$name%'
上面用到两表,别名分别是a和c。
这个SQL语句在查询数据量小的时候,也许没什么问题。但是当两表的数据量各为几十万甚至几百万条的时候,也许不行了吧。
我的问题是:我应该怎么弄,才能优化他的性能呢?
我想到的办法是:给a.id,c.account_id,c.name添加索引。
请问大家还有更好的办法吗?
select c.name from plsm_8100.characters c inner join plsm_8100.account_data a where a.id=c.account_id and c.name like '%$name%'
上面用到两表,别名分别是a和c。
这个SQL语句在查询数据量小的时候,也许没什么问题。但是当两表的数据量各为几十万甚至几百万条的时候,也许不行了吧。
我的问题是:我应该怎么弄,才能优化他的性能呢?
我想到的办法是:给a.id,c.account_id,c.name添加索引。
请问大家还有更好的办法吗?
解决方案 »
- 求mysql数据库工程师面试的题目
- sql语句这样写可不可以
- 数据库语句,大家都进来看看啊,我是菜鸟.....
- 工作中遇到一个问题,请教下,大家来帮帮忙,主要是mysql中的日期问题
- DECLARE continue handler for not found是什么意思 非要在过程中出现吗
- 相同的语句在两个MYSQL一个出错,一个不出错
- 再次提问,求一SQL,
- MySql与SqlServer在语法及性能的比较! 60(分)
- 关于SQL SERVER2000的问题
- 我为什么不能创建MYSQL用户....
- 用C++连接mysql数据库,为什么使用了CLIENT_MULTI_STATEMENTS仍然无法使用存储过程
- mysql数据库无法插入中文
你在plsm_8100.account_data的ID字段加索引。c.name字段模糊查询,加了索引也不会用到。另外可以加个覆盖索引,a.id,c.account_id,c.name三个字段组成一个复合索引。
另外可以加个覆盖索引,a.id,c.account_id,c.name三个字段组成一个复合索引。
这种复合索引如何建立?因为我跟同事一起合作,给表起的别名可能不一样。
alter_specification [, alter_specification] ...alter_specification:
ADD [COLUMN] column_definition [FIRST | AFTER col_name ]
| ADD [COLUMN] (column_definition,...)
| ADD INDEX [index_name] [index_type] (index_col_name,...)
我说错了。
c.account_id,c.name
同一个表上的才行,复合索引。
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html8、如何给分和结贴?
http://community.csdn.net/Help/HelpCenter.htm#结帖