MySQL
查询语句都被使用,但是我们应该如何设计高效合理的MySQL查询语句呢下面是教你mysql查询语句的合理设计
方法,并与大家
分享,供大家
学习和学习。
1。合理使用指数
索引是数据库中重要的数据结构,其根本目的是为了提高查询效率。大部分的数据库产品现在使用IBM的第一个索引结构,索引的使用是适当的,和下面的原则如下:
在频繁
连接中,在未指定为外键的列上没有建立索引,而不
经常连接的字段将由
优化器自动索引。
在经常
排序或分组的列上建立索引(即按
操作分组或按
顺序排列)。
建立一个与许多不同的通常用在
条件表达式的值列中
搜索,而不是建立在一个与一个小数量的不同的值的列的索引。例如,只有男人和女人在雇员表的性别名单中有两个不同的值,所以没有必要建立索引如果索引的建立不会提高查询效率,反而会降低更新
速度。
如果要对多个列进行排序,则可以在这些列上建立复合索引(复合索引)。
使用
系统工具。如果Informix数据库有一个tbcheck工具,它可以在一个可疑的指标
检查。在数据库
服务器中,指数可能失败或由于频繁操作,使阅读效率,如果查询使用索引不清楚慢下来,试着用tbcheck工具检查索引的完整性,修复时必要的。此外,在数据库表更新大量数据,
删除并重建索引可以提高查询的速度。
2。避免或简化排序
对于大表的重复顺序应该简化或避免。当索引能自动按适当的顺序生成输出时,优化器避免了排序的
步骤:
索引不包含要排序的一列或数列。
组中的列或按BY子句的顺序与索引的顺序不一致;
排序的列来自不同的表。
为了避免不必要的排序,有必要
正确地构建索引,合理地合并数据库表(虽然有时会
影响表的规范化,但相对于效率而言是
值得改进的)。
三.消除对大表行数据的顺序访问
在嵌套查询,顺序访问表的查询效率可能有致命的影响。例如,顺序存取
策略,一个嵌套3层的查询,如果1000行查询各层,然后查询将数据查询10亿行。为了避免这是索引的连接柱的主要方式,例如,两个表:学生表(学校名称、姓名、年龄…)和选择表(学号,课程号,成绩)。如果两表是连接,一个指标是学校数量的连接领域设定。
还可以使用联合来避免顺序访问。尽管所有检查列都有索引,但是WHERE子句的某些形式强制优化器使用顺序访问:
SELECT * FROM订单(customer_num = 104和order_num > 1001)或order_num = 1008
虽然指数是建立在customer_num和order_num,上述优化器使用顺序存取
路径扫描整个表。因为这句话是检索收集分离的行,则应改为下列语句:
SELECT * FROM订单customer_num = 104和order_num > 1001
联盟
SELECT * FROM订单order_num = 1008
通过这种方式,您可以使用索引路径
处理查询。
4。避免相关子查询
列标签也出现在主查询和WHERE子句的查询中。很有可能,当一列值的变化在主查询,子查询必须再次质疑。更多的嵌套层次查询,效率较低,所以查询应尽可能避免。如果子查询是不可避免的,你应该过滤尽可能多的行的子查询。
5。避免困难的正规表达式
匹配和类似关键字
支持通配符匹配,在技术上称为正则表达式。但是这种匹配非常耗时:
选择*从客户那里像98_ _ _邮编
即使指数是建立在邮政编码字段,顺序扫描也用在这种情况下,如果语句改为选择*从客户那里邮编> 98000,查询将查询与索引
执行查询时,明显提高了速度。
此外,非启动子也是可以避免的。例如,声明:选择*从客户那里邮编{ 2, 3 } > 80,采用非
启动子在WHERE子句中,这样的声明不使用索引。
6。使用临时表来加快查询速度
排序表的子集并
创建临时表有时可以加速查询。它有助于避免多个排序操作,并且在其他方面可以简化优化器的
工作:
选择cust.name,rcvbles。平衡等栏目,…
从客户,rcvbles
在cust.customer_id = rcvlbes.customer_id
和rcvblls平衡>0。
和客户邮编> 98000
为了cust.name
如果要多次执行查询,那么所有未支付的客户都可以在临时
文件中找到,并根据客户的
名字进行排序。
选择cust.name,rcvbles。平衡等栏目,…
从客户,rcvbles
在cust.customer_id = rcvlbes.customer_id
和rcvblls平衡>0。
为了cust.name
临时cust_with_balance
然后按以下方式查询临时表:
SELECT * FROM cust_with_balance
在邮政编码> 98000
临时表中的行小于主表中的行,而物理顺序是所需的序列,这减少了
磁盘I/O,因此查询工作量可以显著减少。
注意:临时表的创建并不能反映主表的
修改。在频繁修改主表数据的
情况下,注意不要丢失数据。
7。使用排序
替换非顺序访问
非顺序磁盘访问速度最慢的操作,来回移动磁盘上存取臂。SQL语句隐藏了这一情况,便于我们写查询需要访问大量的非
连续的页编写
应用程序的时候,在某些情况下,使用数据库的排序能力代替非顺序访问可以提高查询。
以上是如何教你如何设计高效合理的mysql查询
语言,希望能对你有所帮助。