MySQL 查询优化器的使用
ZDNet软件频道 时间:2001-05-23 作者:Susan Sales Harkins、Martin W. P. Reid |
我要评论()
本文关键词:
查询引擎总是不能正确理解你的查询意图吗?害怕的错误的时机提出错误的问题吗? Susan S. Harkins 告诉我们怎样用 MySQL 的查询优化器提高你的交流技能。
MySQL 查询优化器的使用
更多考虑
合适的索引使用方便,是改善性能的良方。但也有一个缺点:在加快了数据检索的同时,数据插入却减慢了,这是因为每次添加记录时MySQL需要更新索引值。如果插入量非常大而检索量很小,索引可能并不合适。而且,有些人倾向于写索引仅仅是因为他们会写,这就有点病态了。不要加上多余的索引--这样做会不必要的使你的应用更复杂,而且会降低性能而不是提高。
虽然运行高效的查询是提高速度的关键,但有时你需要关掉优化器。比如你想删除一个表中所有的记录,然后返回删除的行数。单是DELETE语句作不到这点,因为不管实际删除多少行,MySQL都报告删除了0行。如果强迫优化器逐行估值,MySQL将返回删除的正确记录数。如果需要关掉优化器,就把本文提到的方法反过来用。
选择不用索引可能该归咎于MySQL。如果一个索引需要MySQL访问一个表中超过30%的行,MySQL将不使用存在的索引,即使你作的都没错而且可用。这时,你有两种选择。可以选择全表扫描,也可以使用LIMIT函数检索指定数目的行,行数在LIMIT函数中指定。比如函数Limit 500将只检索500个匹配记录。更详细点,此例返回SELECT语句匹配的前500条记录。如果一个表不包含索引,MySQL按顺序对每一行进行估值,来寻找匹配值。你可以想象全表扫描要花多少时间,尤其当你的表包含几千条记录时。
底线
理解优化器如何对查询进行估值有助于帮你避免影响查询性能的潜在问题。主要问题是确保优化器在可能时使用存在的索引。我们已经涉及了你将在这一方面遇到的主要问题。
Susan Sales Harkins 是 Microsoft Office 的咨询专家,而且是 Using Microsoft Access 97 和 Using Microsoft Access 2000 的作者,二者都由QUE出版.