SELECT a.id,a.userid,a.weibo,a.sina_uid,a.sina_nick,a.addtime,a.avatarUrl,b.nickname as nick FROM tgw_weibo a
NNER JOIN tgw_userinfor b on a.userid != 0 AND a.userid= b.userid WHERE b.platformid = 1 AND a.platformid =1 AND a.weibo like '%1%' LIMIT 0,5现在有300多万条数据,查出时间要3秒多。有什么好方法能提高速度吗?表结构是innodb,没法做全文索引
NNER JOIN tgw_userinfor b on a.userid != 0 AND a.userid= b.userid WHERE b.platformid = 1 AND a.platformid =1 AND a.weibo like '%1%' LIMIT 0,5现在有300多万条数据,查出时间要3秒多。有什么好方法能提高速度吗?表结构是innodb,没法做全文索引
解决方案 »
- [mysql问题]局域网内有两台机子装了mysql,但是不能远程登录
- 求一条MYSQL 语句
- 新手求解:mysql在一张没有任何规例的如何取最后一条记录
- Mysql function select into不能给变量赋值
- 请问mysql如何进行回滚
- 关于MySQL密码HASH的逆算与对策。
- 【psql区人太少,来这里求助!】postgresql 通过yum安装的 如何安装tablefunc
- mysql远程登陆与服务器的系统密码有关吗?
- 求助 中文 like '% %'的情况怎么用索引?
- 两张表联合查询,然后又要标示是哪张表查询出来的,需要根据这个类型去具体哪张表查出详细信息
- 请教一个replication的错误解决方法
- 如何使新建mysql数据库获取其他数据库字段值
在tgw_weibo、tgw_userinfor :建立userid、platformid 复合索引
去掉 LIMIT 0,5 后速度如何
分别测试一下
show index from tgw_userinfor explain SELECT a.id,a.userid,a.weibo,a.sina_uid,a.sina_nick,a.addtime,a.avatarUrl,b.nickname as nick FROM tgw_weibo a
NNER JOIN tgw_userinfor b on a.userid != 0
AND a.userid= b.userid
WHERE b.platformid = 1 AND a.platformid =1 AND a.weibo like '%1%' LIMIT 0,5
贴出来以供分析。
去掉 LIMIT 0,5 速度没什么改变
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+---------------+------------+-----------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| tgw_userinfor | 0 | PRIMARY | 1 | id | A | 117 | NULL | NULL | | BTREE | |
| tgw_userinfor | 0 | uniq_platform_user_id | 1 | platformid | A | 2 | NULL | NULL | | BTREE | |
| tgw_userinfor | 0 | uniq_platform_user_id | 2 | userid | A | 117 | NULL | NULL | | BTREE | |
| tgw_userinfor | 1 | userid | 1 | userid | A | 117 | NULL | NULL | | BTREE | |
+---------------+------------+-----------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| tgw_weibo | 0 | PRIMARY | 1 | id | A | 3605627 | NULL | NULL | | BTREE | |
| tgw_weibo | 1 | addtime | 1 | addtime | A | 1802813 | NULL | NULL | YES | BTREE | |
| tgw_weibo | 1 | user | 1 | userid | A | 901406 | NULL | NULL | YES | BTREE | |
| tgw_weibo | 1 | sinauid | 1 | sina_uid | A | 3605627 | NULL | NULL | YES | BTREE | |
| tgw_weibo | 1 | weibo | 1 | weibo | NULL | 1 | NULL | NULL | YES | FULLTEXT | |
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+------------------------------+-----------------------+---------+----------------------+------+-------------+
| 1 | SIMPLE | b | ref | uniq_platform_user_id,userid | uniq_platform_user_id | 4 | const | 51 | Using where |
| 1 | SIMPLE | a | ref | user | user | 9 | db_tiangewb.b.userid | 4 | Using where |
+----+-------------+-------+------+------------------------------+-----------------------+---------+----------------------+------+-------------+
再贴一下,show index 和 explain 呢。
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| tgw_weibo | 0 | PRIMARY | 1 | id | A | 3605627 | NULL | NULL | | BTREE | |
| tgw_weibo | 1 | addtime | 1 | addtime | A | 1802813 | NULL | NULL | YES | BTREE | |
| tgw_weibo | 1 | sinauid | 1 | sina_uid | A | 3605627 | NULL | NULL | YES | BTREE | |
| tgw_weibo | 1 | user | 1 | userid | A | 901406 | NULL | NULL | YES | BTREE | |
| tgw_weibo | 1 | user | 2 | platformid | A | 901406 | NULL | NULL | | BTREE | |
| tgw_weibo | 1 | weibo | 1 | weibo | NULL | 1 | NULL | NULL | YES | FULLTEXT | |
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+mysql> show index from tgw_userinfor
;
+---------------+------------+-----------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+---------------+------------+-----------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| tgw_userinfor | 0 | PRIMARY | 1 | id | A | 117 | NULL | NULL | | BTREE | |
| tgw_userinfor | 0 | uniq_platform_user_id | 1 | platformid | A | 2 | NULL | NULL | | BTREE | |
| tgw_userinfor | 0 | uniq_platform_user_id | 2 | userid | A | 117 | NULL | NULL | | BTREE | |
| tgw_userinfor | 1 | userid | 1 | userid | A | 117 | NULL | NULL | | BTREE | |
+---------------+------------+-----------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
+----+-------------+-------+------+------------------------------+-----------------------+---------+----------------------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+------------------------------+-----------------------+---------+----------------------------+------+-------------+
| 1 | SIMPLE | b | ref | uniq_platform_user_id,userid | uniq_platform_user_id | 4 | const | 51 | Using where |
| 1 | SIMPLE | a | ref | user | user | 13 | db_tiangewb.b.userid,const | 4 | Using where |
+----+-------------+-------+------+------------------------------+-----------------------+---------+----------------------------+------+-------------+
不去掉要多长时间a.weibo like '%1%'->在weibo上建立复合索引
修改成这样:
a.weibo like '1%'
union
a.weibo like '%1'
union
a.weibo like '%1' 这样能搜索出所有包含1的数据吗
1、表分区,并行查询
2、模拟全文索引,做一下结构化索引优化
3、尽可能插入更多的其他限制条件减少遍历WEIBO的记录次数
SELECT a.id,a.userid,a.weibo,a.sina_uid,a.sina_nick,a.addtime,a.avatarUrl,b.nickname as nick
FROM tgw_weibo a INNER JOIN tgw_userinfor b on a.userid= b.userid
where b.userid != 0 and b.platformid = 1 and a.platformid =1 AND a.weibo like '%1%'
select a.id,a.userid,a.weibo,a.sina_uid,a.sina_nick,a.addtime,a.avatarUrl,b.nickname as nick
from
(select id, userid, weibo, sina_uid, sina_nick, addtime, avatarurl
from tgw_weibo
where platformid =1 and userid != 0) a,
inner join
(select userid, nickname from tgw_weibo where platformid =1 and userid != 0) b
on a.userid = b.userid
where a.weibo like '%1%'
limit 0,5
主要是用MyIsam,将大表单独分区,建索引。查询尽时使用索引,另外如果有连接,尽量先把大表用子查询+where过滤了,再连接。