对千万级且字段复杂的表进行连表查询,一直是MSSQL操作者最大的考验。在提取千万级连表查询大数据时,MSSQL有特殊的index优化机制。index是数据库加快查找效率的重要手段。但是如果表达式过于臃肿,由此拖延SQL的查询速度,甚至让基本的SQL查询不能满足开发者需求。
因此,我们在SQL优化中最主要考虑的就是表的连接,特别是涉及到千万级连表的查询优化。
的的关联查询(Joins)才是最容易超时的sql语句,此时要考虑使用内连接(inner join)或者外连接(left join、right join)进行优化,另外在某些特定情况下,我们也可以考虑使用union查询:
“`sql
select M.*
from
(
SELECT a.name, b.id
FROM tableA a
INNER JOIN tableB b
ON a.b_id = b.id
union
SELECT a.name, c.id
FROM tableA a
_INNER JOIN tableC c
ON a.c_id = c.id
) M
where M.name = ‘无聊的法师’
1 |
<br>为了能够更有效的查询结果,我们在查询时也可以使用exists、not in、in等操作进行优化:</br><br>```sql</br>SELECT a.name, b.id<br>FROM tableA a</br>WHERE EXISTS <br>(</br> SELECT *<br> FROM tableB b </br> WHERE a.b_id = b.id <br> AND b.name = '无聊的法师' </br>)<br> |
最后,就要依赖index来加速查询,尤其是对于复杂的连表查询而言,为了合理地使用index,需要深入理解MSSQL的B树索引技术以及二叉索引技术。
在MSSQL中千万级连表查询优化之路曲折复杂,需要做到真正的理解MSSQL的查询机制,多种查询语句搭配,加上索引的使用,才能对超万级别的查询做到毫秒级别的返回。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。