Jadual Kandungan
AUTO_CREATE_STATISTICS选项:
Auto Update Statistics选项:
如何关闭SQLServer自动更新统计信息的选项?
何时创建统计信息?
何时更新统计信息?
Rumah pangkalan data tutorial mysql 性能优化统计信息SQLServer自动更新和自动创建统计信息

性能优化统计信息SQLServer自动更新和自动创建统计信息

Jun 07, 2016 pm 03:19 PM
sqlserver pengoptimuman maklumat cipta prestasi perangkaan automatik

原文译自:http://www.mssqltips.com/sqlservertip/2766/sql-server-auto-update-and-auto-create-statistics-options/?utm_source=dailynewsletterutm_medium=emailutm_content=headlineutm_campaign=2012913 统计信息是如何提高SQLServer查询性能的?统计

原文译自:http://www.mssqltips.com/sqlservertip/2766/sql-server-auto-update-and-auto-create-statistics-options/?utm_source=dailynewsletter&utm_medium=email&utm_content=headline&utm_campaign=2012913

 

        统计信息是如何提高SQLServer查询性能的?统计直方图用作在查询执行计划中查询优化器的选择依据。如果一个查询谓词包含统计信息的列,那么查询优化器不需要预测该查询中影响行数,因此,查询优化器有足够的信息去创建执行计划。SQLServer创建执行计划有一下几种不同的方式:

  • 统计信息会在每个新创建的索引中自动创建统计信息。
  • 如果数据库中AUTO_CREATE_STATISTICS被设置为ON,SQLServer将会自动对查询中用到的,且没有索引的列自动创建统计信息。

 

AUTO_CREATE_STATISTICS选项:

当把该选项设为ON时,查询优化器会对在谓词中使用的到列,如果这些列的统计信息不可用,则会单独对每列创建统计信息。这些统计信息对创建一个查询计划非常必要。它们创建于那些现有统计对象中不存在直方图的列上,名字包括列名和对象ID的十六进制格式:_WA_Sys__。这些统计信息用于查询优化器决定使用何种优化后的执行计划。

可以通过以下语句启用自动统计信息创建功能:

ALTER  DATABASE[你的库名]

SET AUTO_CREATE_STATISTICS ON

 

Auto Update Statistics选项:

         统计信息会在查询编译或者执行缓存执行计划前被检查。当在以下情况下,统计信息会被认为过期:

1、  在一个空表中有数据的改动。

2、  当统计信息创建时,表的行数只有500或以下,且后来统计对象中的引导列的更改次数大于500.

3、  当表的统计信息收集时,超过了500行,且统计对象的引导列后来更改次数超过500+表总行数的20%时。

4、  在Tempdb中的表,少于6行且最少有6行被更改。

更多的信息可以查看MSDN

 

可以使用一下语句来开启自动更新统计信息:

ALTER  DATABASE[你的库名]

SET AUTO_UPDATE_STATISTICS ON

 

过时的统计信息会引起大量的性能问题,所以建议开启自动更新。它的默认设置是ON。没有更新统计信息常见的影响是选择了次优的执行计划,然后性能下降。有时候,过期的统计信息可能比没有统计信息更加糟糕。

使用以下语句来开启异步更新统计信息:

ALTER  DATABASE[你的库名]

SET AUTO_UPDATE_STATISTICS_ASYNC ON

如果开启了这个选项,查询优化器将先执行一次查询,然后更新过期的统计信息。当你把这个选项设为OFF时,查询优化器将在编译查询之前更新过期统计信息。这个选项在OLTP环境下很有用,但在数据仓库中有负面影响。

 

如何关闭SQLServer自动更新统计信息的选项?

         在非常特殊的情况下,你不得不禁用这个有用的特性,可以使用以下方式关闭:

1、  使用sp_autostats来在表、索引或者统计对象上显式并更改自动更新统计信息选项。

2、  在表级别中,可以使用NORECOMPUTEoption of the UPDATE STATISTICS命令。

3、  你也可以在CREATESTATISTICS命令中使用NORECOMPUTE选项,但之后需要删除并重建统计信息。

4、  在CREATE INDEX命令中使用STATISTICS_NORECOMPUTE。

5、  在数据库级别,可以使用以下命令来禁用:

ALTER DATABASE[你的库名]

SET AUTO_UPDATE_STATISTICS OFF

当使用数据库级别的禁用时,表、索引或者统计对象的设置将全部失效。

 

何时创建统计信息?

         其中一个答案是当使用数据库引擎优化顾问(DTA)时建议创建。另外一个情况是当你查看执行计划是,出现丢失统计信息的警告(missing statistics warnings),如下图的黄色三角叹号:

 性能优化统计信息SQLServer自动更新和自动创建统计信息

可以使用SQLServer Profiler 去监控丢失列统计信息的事件,你也可以考虑当你的查询从子集或者查询谓词中包含关联列的那些列上创建统计信息。

创建统计信息的语句如下:

--Create statistics on all rows

CREATE STATISTICSstatistics_name   ONYourDBName.YourSchema.YourTable(YourColumn1,YourColumn2)  

WITH FULLSCAN

 --Create statistics using a random 10 percent sampling rate

CREATE STATISTICSstatistics_name   ONYourDBName.YourSchema.YourTable(YourColumn1,YourColumn2)   

WITH SAMPLE 10PERCENT

 

何时更新统计信息?

         如果你的查询执行得很慢,那么是时候更新统计信息了。并且建议当你插入大量数据到升序或者降序的列时,更新统计信息,因为在这种情况下,统计信息直方图将不包含新插入的值,同时,强烈建议在除索引维护(当你重建、整理碎片或者重组索引时,数据分布不会改变)外的维护工作之后更新统计信息。

         如果数据库的数据更改频繁,建议最低限度每天更新一次统计信息。一般来说,在数据仓库中,可以降低更新统计信息的频率,当更新时,通常建议执行sp_updatestats存储过程来实现。


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah perbezaan antara sintaks mysql dan sqlserver Apakah perbezaan antara sintaks mysql dan sqlserver Apr 22, 2024 pm 06:33 PM

Perbezaan sintaks antara MySQL dan SQL Server terutamanya ditunjukkan dalam objek pangkalan data, jenis data, pernyataan SQL dan aspek lain. Perbezaan objek pangkalan data termasuk enjin storan dan cara kumpulan fail ditentukan, dan penciptaan indeks dan kekangan. Perbezaan jenis data melibatkan perbezaan dalam jenis angka, jenis aksara, dan jenis tarikh dan masa. Perbezaan pernyataan SQL ditunjukkan dalam had set hasil, sisipan data, kemas kini dan operasi padam, dsb. Perbezaan lain termasuk cara lajur identiti, paparan dan prosedur tersimpan dibuat. Memahami perbezaan ini adalah penting untuk mengelakkan ralat apabila menggunakan sistem pangkalan data yang berbeza.

Di manakah fail pangkalan data navicat? Di manakah fail pangkalan data navicat? Apr 23, 2024 am 10:57 AM

Lokasi di mana fail konfigurasi pangkalan data Navicat disimpan berbeza mengikut sistem pengendalian: Windows: Laluan khusus pengguna ialah %APPDATA%\PremiumSoft\Navicat\macOS: Laluan khusus pengguna ialah ~/Library/Application Support/Navicat\Linux: Laluan khusus pengguna ialah ~/ .config/navicat\Nama fail konfigurasi mengandungi jenis sambungan, seperti navicat_mysql.ini. Fail konfigurasi ini menyimpan maklumat sambungan pangkalan data, sejarah pertanyaan dan tetapan SSH.

Perbandingan prestasi rangka kerja Java yang berbeza Perbandingan prestasi rangka kerja Java yang berbeza Jun 05, 2024 pm 07:14 PM

Perbandingan prestasi rangka kerja Java yang berbeza: Pemprosesan permintaan REST API: Vert.x adalah yang terbaik, dengan kadar permintaan 2 kali SpringBoot dan 3 kali Dropwizard. Pertanyaan pangkalan data: HibernateORM SpringBoot adalah lebih baik daripada Vert.x dan ORM Dropwizard. Operasi caching: Pelanggan Hazelcast Vert.x lebih unggul daripada mekanisme caching SpringBoot dan Dropwizard. Rangka kerja yang sesuai: Pilih mengikut keperluan aplikasi Vert.x sesuai untuk perkhidmatan web berprestasi tinggi, SpringBoot sesuai untuk aplikasi intensif data, dan Dropwizard sesuai untuk seni bina perkhidmatan mikro.

Pembalikan nilai kunci tatasusunan PHP: analisis perbandingan prestasi kaedah yang berbeza Pembalikan nilai kunci tatasusunan PHP: analisis perbandingan prestasi kaedah yang berbeza May 03, 2024 pm 09:03 PM

Perbandingan prestasi kaedah membalik nilai kunci tatasusunan PHP menunjukkan bahawa fungsi array_flip() berprestasi lebih baik daripada gelung for dalam tatasusunan besar (lebih daripada 1 juta elemen) dan mengambil masa yang lebih singkat. Kaedah gelung untuk membalikkan nilai kunci secara manual mengambil masa yang agak lama.

Pengoptimuman program C++: teknik pengurangan kerumitan masa Pengoptimuman program C++: teknik pengurangan kerumitan masa Jun 01, 2024 am 11:19 AM

Kerumitan masa mengukur masa pelaksanaan algoritma berbanding saiz input. Petua untuk mengurangkan kerumitan masa program C++ termasuk: memilih bekas yang sesuai (seperti vektor, senarai) untuk mengoptimumkan storan dan pengurusan data. Gunakan algoritma yang cekap seperti isihan pantas untuk mengurangkan masa pengiraan. Hapuskan berbilang operasi untuk mengurangkan pengiraan berganda. Gunakan cawangan bersyarat untuk mengelakkan pengiraan yang tidak perlu. Optimumkan carian linear dengan menggunakan algoritma yang lebih pantas seperti carian binari.

Bagaimana untuk mengoptimumkan prestasi program berbilang benang dalam C++? Bagaimana untuk mengoptimumkan prestasi program berbilang benang dalam C++? Jun 05, 2024 pm 02:04 PM

Teknik berkesan untuk mengoptimumkan prestasi berbilang benang C++ termasuk mengehadkan bilangan utas untuk mengelakkan perbalahan sumber. Gunakan kunci mutex ringan untuk mengurangkan perbalahan. Optimumkan skop kunci dan minimumkan masa menunggu. Gunakan struktur data tanpa kunci untuk menambah baik keselarasan. Elakkan sibuk menunggu dan maklumkan urutan ketersediaan sumber melalui acara.

Perbandingan prestasi C++ dengan bahasa lain Perbandingan prestasi C++ dengan bahasa lain Jun 01, 2024 pm 10:04 PM

Apabila membangunkan aplikasi berprestasi tinggi, C++ mengatasi bahasa lain, terutamanya dalam penanda aras mikro. Dalam penanda aras makro, kemudahan dan mekanisme pengoptimuman bahasa lain seperti Java dan C# mungkin berprestasi lebih baik. Dalam kes praktikal, C++ berprestasi baik dalam pemprosesan imej, pengiraan berangka dan pembangunan permainan, dan kawalan langsungnya terhadap pengurusan memori dan akses perkakasan membawa kelebihan prestasi yang jelas.

Apakah beberapa cara untuk menyelesaikan ketidakcekapan dalam fungsi PHP? Apakah beberapa cara untuk menyelesaikan ketidakcekapan dalam fungsi PHP? May 02, 2024 pm 01:48 PM

Lima cara untuk mengoptimumkan kecekapan fungsi PHP: elakkan penyalinan pembolehubah yang tidak perlu. Gunakan rujukan untuk mengelakkan penyalinan berubah-ubah. Elakkan panggilan fungsi berulang. Fungsi mudah sebaris. Mengoptimumkan gelung menggunakan tatasusunan.

See all articles