1, 前提:
①该建的索引我都建了.
②其中billing_demond_result的有10W的数据.
2, 建立索引语句:DELIMITER $$
USE `weipaike`$$
DROP VIEW IF EXISTS `vw_billing_user_charge`$$
CREATE ALGORITHM=MERGE DEFINER=`mydb`@`%` SQL SECURITY DEFINER VIEW `vw_billing_user_charge` AS
SELECT
`a`.`phone` AS `phone`,
`a`.`province` AS `province`,
`a`.`city` AS `city`,
`a`.`regtime` AS `regtime`,
`a`.`channel` AS `channel`,
(COUNT(`b`.`phone`) + IFNULL((SELECT COUNT(0) FROM `billing_demond_result` WHERE (`billing_demond_result`.`phone` = `a`.`phone`) GROUP BY `billing_demond_result`.`phone`),0)) AS `total_cnt`
FROM (`billing_id` `a`
LEFT JOIN `billing_result` `b`
ON ((`a`.`phone` = `b`.`phone`)))
WHERE (1 = 1)
GROUP BY `a`.`phone`$$
DELIMITER ;3, 建立后:
①会有"不能建立merge视图的警告", 然后自动转成temptable视图;
②使用SELECT * FROM vw_billing_user_charge LIMIT 100. 会耗时10S. 太慢了.
4, 问:
请教大家该如何优化, 谢谢!
PS:
①若不建立视图, 直接执行sql, 则很快(0.2S就搞定), 原因:走索引, 而且不需要全表查.
②若建立视图, 通过视图的来查询, 则很慢(>10S才能搞定), 原因:虽然走索引, 但因为只能建立ALGORITHM=TEMPTABLE视图, 所以视图的数据得全表全部查询出来, 所以整体才查询会很慢
①该建的索引我都建了.
②其中billing_demond_result的有10W的数据.
2, 建立索引语句:DELIMITER $$
USE `weipaike`$$
DROP VIEW IF EXISTS `vw_billing_user_charge`$$
CREATE ALGORITHM=MERGE DEFINER=`mydb`@`%` SQL SECURITY DEFINER VIEW `vw_billing_user_charge` AS
SELECT
`a`.`phone` AS `phone`,
`a`.`province` AS `province`,
`a`.`city` AS `city`,
`a`.`regtime` AS `regtime`,
`a`.`channel` AS `channel`,
(COUNT(`b`.`phone`) + IFNULL((SELECT COUNT(0) FROM `billing_demond_result` WHERE (`billing_demond_result`.`phone` = `a`.`phone`) GROUP BY `billing_demond_result`.`phone`),0)) AS `total_cnt`
FROM (`billing_id` `a`
LEFT JOIN `billing_result` `b`
ON ((`a`.`phone` = `b`.`phone`)))
WHERE (1 = 1)
GROUP BY `a`.`phone`$$
DELIMITER ;3, 建立后:
①会有"不能建立merge视图的警告", 然后自动转成temptable视图;
②使用SELECT * FROM vw_billing_user_charge LIMIT 100. 会耗时10S. 太慢了.
4, 问:
请教大家该如何优化, 谢谢!
PS:
①若不建立视图, 直接执行sql, 则很快(0.2S就搞定), 原因:走索引, 而且不需要全表查.
②若建立视图, 通过视图的来查询, 则很慢(>10S才能搞定), 原因:虽然走索引, 但因为只能建立ALGORITHM=TEMPTABLE视图, 所以视图的数据得全表全部查询出来, 所以整体才查询会很慢
解决方案 »
- mysql用户@'%'不能 登陆问题的问题
- 如何获取mysql中上一次执行的SQL语句?
- 关于MYSQL中究竟是如何检测到死锁的
- MYSQL表的处理问题
- navicat能实现时间同步吗
- 最后10分了,求助一个问题:我如何用程序得知我的系统上是否安装了MYSQL,如果装了则如何获得它的版本号!
- solaris 上安装mysql 4.0.20 src的问题!
- 新手上路,关于MYSQL的简单问题
- 這種語句在mysql中應如何寫??
- mysql 查询效率问题
- mysql数据库中,查询a表的a2字段中是否包含1或2或3,语句应该怎样写?知道的大大指点下
- Mysql 经常挂:InnoDB: Unable to lock ./ibdata1, error: 11
及 explain select ... 以供分析。
触发期, 非常费时也影响效率