1)使用的第一个查询...大约用了23秒
select a.id from mza_movie_upload a,mza_movie_statics b
where a.status=1 and b.download=1 and a.id=b.rid
group by b.rid order by sum(b.download) desc
目前我修改了查询..这需要大约9秒
select a.id from mza_movie_upload a
INNER JOIN mza_movie_statics b
ON a.id=b.rid WHERE a.status=1 and b.download=1
group by b.rid order by sum(b.download) desc
explain select a.id from mza_movie_upload a INNER JOIN mza_movie_statics b ON a.id=b.rid WHERE a.status=1 and b.download=1 group by b.rid order by sum(b.download) desc;
+----+-------------+-------+--------+---------------+---------+---------+----------------------+---------+----------------------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+--------+---------------+---------+---------+----------------------+---------+----------------------------------------------+ | 1 | SIMPLE | b | ALL | NULL | NULL | NULL | NULL | 1603089 | Using where; Using temporary; Using filesort | | 1 | SIMPLE | a | eq_ref | PRIMARY | PRIMARY | 4 | mmdfurni_dev11.b.rid | 1 | Using where | +----+-------------+-------+--------+---------------+---------+---------+----------------------+---------+----------------------------------------------+ 2 rows in set (0.03 sec)
我不确定要做的表演是什么?我希望这个查询是快速的..我尝试索引rid和id,但这仍然使查询变得更糟。
下面是表格的详细信息
mza_movie_upload
+---------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | userid | varchar(200) | NO | | NULL | | | email | varchar(200) | NO | | NULL | | | up_date | datetime | NO | | NULL | | | file_size | varchar(200) | NO | | NULL | | | temp_filename | varchar(200) | NO | | NULL | | | fileneame | varchar(200) | NO | MUL | NULL | | | filepath | varchar(255) | NO | | NULL | | | status | varchar(20) | NO | | NULL | | | ip | varchar(200) | NO | | NULL | | | category | varchar(200) | NO | | NULL | | | mcode | bigint(20) | NO | | NULL | | | movie_name | varchar(200) | NO | | NULL | | +---------------+--------------+------+-----+---------+----------------+ 13 rows in set (0.00 sec)
MZA_Movie_Statics
+-----------+---------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+---------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | rid | int(11) | NO | | NULL | | | uid | int(11) | NO | | NULL | | | save | int(11) | NO | | NULL | | | download | int(11) | NO | | NULL | | | enterdate | date | NO | | NULL | | +-----------+---------+------+-----+---------+----------------+ 6 rows in set (0.00 sec)
尝试将查询改写为:
SELECT b.rid
FROM mza_movie_upload a
INNER JOIN mza_movie_statics b
ON a.id=b.rid
WHERE a.status= '1' and b.download= '1'
-- group by b.rid order by sum(b.download) desc;
GROUP BY b.rid ORDER BY count(*) DESC;
在此查询中,select a.id
被select b.rid
替换,并且由于join...ON a.id=b.rid
谓词,因此与oryginal查询100%等效,但使MySql略有改进,并且如@Dennis Leon所建议的,a.status='1'和b.download='1'
与字符串相比较,而不是与数字相比较。还尝试将Order by sum(B.download)desc
替换为Order by count(*)desc
-由于查询只检索b.download='1'的行,最后创建两个索引:
create index bbbb on mza_movie_statics( download, rid );
create index aaaaa on mza_movie_upload( status );
然后尝试以上更改后的查询速度。
我有5个SQL表 存储 工作人员 部门 SOLD_Items staff_rating 我创建了一个视图,将这四个表连接在一起。最后一个表(staff_rating),我希望在接近项目被出售的时间(sold_items.date)获得视图行的rating列。我尝试了以下SQL查询,这些查询工作正常,但存在性能问题。 SQL查询1 SQL查询2 SQL查询%2比SQL查询%1快。但这两种方法都存在性
我有下面的模式, 学生(名字、姓氏、SID) 已注册(学生ID、课程ID) 课程(CID、课程名称、系) 我需要找出哪些学生上的课比课多。和位位于类别中。我有以下查询,其中列出了所有注册课程的学生以及他们注册了多少课程。 不太确定如何将这个数字与那些注册信息技术课程的人进行比较。
问题内容: 我正在使用angular-filter中的 groupBy 按对象的date属性对对象数组进行分组。 产生以下内容: 如何从最近的日期开始颠倒顺序?当我打印到控制台时,以我想要的顺序打印阵列: 我还编写了一个自定义过滤器来反转groupBy之后的顺序: 我已经这样申请了: 问题答案: 最近有同样的问题。创建一个对象,但需要一个数组,因此涉及一些时髦。我最终从他们的问题页面直接得到了答案
我尝试使用多个自定义字段显示结果,同时按第一个自定义字段(startdate)排序结果。我看到的建议让我尝试了以下方法: 问题是,如果没有meta_key参数,结果会默认过滤帖子的日期。当我添加meta_key参数对结果进行排序时,我得到的每一篇文章都有一个meta_key等于开始日期。通过添加这些meta_key参数,语句似乎完全忽略了meta_query数组中的条件。我如何让查询排序的开始日期
本文向大家介绍MySQL使用profile查询性能的操作教程,包括了MySQL使用profile查询性能的操作教程的使用技巧和注意事项,需要的朋友参考一下 MYSQL的profiling功能要在Mysql版本5.0.37以上才能使用。 查看profile是否开启 基于会话级别开启 查看是否设置生效: 默认是0,设置成功是1 运行SQL语句: 查看profiles 查看具体某条的profile
我需要将以下查询转换为hibernate条件查询。请帮忙 由于投票表上的复合主键,我用@Embeddable分隔了主键,所以后面的createQuery不起作用 和可嵌入对象 请建议一个更好的方法。