MySQL查看性能

时间:2010-05-03 19:01:13

标签: mysql performance view

我有一张桌子,里面有大约100,000名用户。

第一种情况:

explain select state, count(*) as cnt from users where state = 'ca'

当我为上述查询做一个解释计划时,我的成本为5200

第二种情况:

Create or replace view vw_users as select state, count(*) as cnt from users

Explain select cnt from vw_users where state = 'ca'

当我对第二个查询做一个解释计划时,我得到的成本是100,000。

视图中的where子句如何工作?在视图检索所有行之后是否应用了where子句?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:28)

这是关于使用的view algorithm

合并算法适用于大多数表索引和诸如此类 - temptable 算法没有 - 在很多情况下,你的索引只是完全没有使用

还有很多合并不支持的废话

  

如果视图不能使用MERGE   包含以下任何内容   构建体:

* Aggregate functions (SUM(), MIN(), MAX(), COUNT(), and so forth)
* DISTINCT
* GROUP BY
* HAVING
* LIMIT
* UNION or UNION ALL
* Subquery in the select list
* Refers only to literal values (in this case, there is no underlying table)