+ -
当前位置:首页 → 问答吧 → 存储过程会全表查询吗?

存储过程会全表查询吗?

时间:2011-09-15

来源:互联网

看过一个优化文章说 where子语句中带参数就会导致全表查询 那存储过程中的查询语句不可避免的会带上参数条件啊?这会全表查询吗?

作者: pang20c   发布时间: 2011-09-15

SET STATISTICS PROFILE ON 
SET STATISTICS IO ON 
SET STATISTICS TIME ON 
go
你的存储过程执行语句
go
SET STATISTICS PROFILE OFF 
SET STATISTICS IO OFF 
SET STATISTICS TIME OFF
go

你可以用上面的语句来测试存储过程究竟会不会全表查询。

作者: JZF2050   发布时间: 2011-09-15

引用看过一个优化文章说 where子语句中带参数就会导致全表查询
无稽之谈 所以后面的结论也就不成立了。

作者: ACMAIN_CHM   发布时间: 2011-09-15

引用7.2. 优化SELECT语句和其它查询
7.2.1. EXPLAIN语法(获取SELECT相关信息)
7.2.2. 估计查询性能
7.2.3. SELECT查询的速度
7.2.4. MySQL怎样优化WHERE子句
7.2.5. 范围优化
7.2.6. 索引合并优化
7.2.7. MySQL如何优化IS NULL
7.2.8. MySQL如何优化DISTINCT
7.2.9. MySQL如何优化LEFT JOIN和RIGHT JOIN
7.2.10. MySQL如何优化嵌套Join
7.2.11. MySQL如何简化外部联合
7.2.12. MySQL如何优化ORDER BY
7.2.13. MySQL如何优化GROUP BY
7.2.14. MySQL如何优化LIMIT
7.2.15. 如何避免表扫描
7.2.16. INSERT语句的速度
7.2.17. UPDATE语句的速度
7.2.18. DELETE语句的速度
7.2.19. 其它优化技巧
首先,影响所有语句的一个因素是:你的许可设置得越复杂,所需要的开销越多。

执行GRANT语句时使用简单的许可,当客户执行语句时,可以使MySQL降低许可检查开销。例如,如果未授予任何表级或列级权限,服务器不需要检查tables_priv和columns_priv表的内容。同样地,如果不对任何 账户进行限制,服务器不需要对资源进行统计。如果查询量很高,可以花一些时间使用简化的授权结构来降低许可检查开销。

如果你的问题是与具体MySQL表达式或函数有关,可以使用mysql客户程序所带的BENCHMARK()函数执行定时测试。其语法为BENCHMARK(loop_count,expression)。例如:

mysql> SELECT BENCHMARK(1000000,1+1);
+------------------------+
| BENCHMARK(1000000,1+1) |
+------------------------+
| 0 |
+------------------------+
1 row in set (0.32 sec)
上面结果在PentiumII 400MHz系统上获得。它显示MySQL在该系统上在0.32秒内可以执行1,000,000个简单的+表达式运算。

所有MySQL函数应该被高度优化,但是总有可能有一些例外。BENCHMARK()是一个找出是否查询有问题的优秀的工具。

7.2.1. EXPLAIN语法(获取SELECT相关信息)
EXPLAIN tbl_name
或:

EXPLAIN [EXTENDED] SELECT select_options
EXPLAIN语句可以用作DESCRIBE的一个同义词,或获得关于MySQL如何执行SELECT语句的信息:

· EXPLAIN tbl_name是DESCRIBE tbl_name或SHOW COLUMNS FROM tbl_name的一个同义词。

· 如果在SELECT语句前放上关键词EXPLAIN,MySQL将解

作者: ACMAIN_CHM   发布时间: 2011-09-15

建议楼主首先先具备测试,学习的能力

然后对应类似的优化文章只要自己验证一下即可,这样才算获得自己的知识,而不要跟着别人人云亦云。

作者: wfevgch   发布时间: 2011-09-15

EXPLAIN SQL语句

作者: wwwwb   发布时间: 2011-09-15

explain看下

作者: rucypli   发布时间: 2011-09-15