{"id":676,"date":"2021-04-10T22:09:27","date_gmt":"2021-04-10T22:09:27","guid":{"rendered":"https:\/\/datarebus.com\/?p=676"},"modified":"2021-04-10T22:09:27","modified_gmt":"2021-04-10T22:09:27","slug":"index-yaratmadan-once-2","status":"publish","type":"post","link":"https:\/\/datarebus.com\/index.php\/2021\/04\/10\/index-yaratmadan-once-2\/","title":{"rendered":"Index Yaratmadan \u00d6nce"},"content":{"rendered":"\n<p>T\u00fcm Relational Database&#8217;lerde oldu\u011fu gibi SQL Server&#8217;da performans art\u0131\u015f\u0131n\u0131n en b\u00fcy\u00fck destek\u00e7isi Index&#8217;lerdir. Index nedir? Ne i\u015fe yarar? Gibi sorulara burada cevap vermeyece\u011fiz. En az\u0131ndan bu bilgilere biraz a\u015fina olanlar\u0131n okumas\u0131 gereken bir yaz\u0131 olacak. Ama giri\u015f olmas\u0131 i\u00e7in her zaman verdi\u011fimiz \u00f6rne\u011fi burada da tekrarlam\u0131\u015f olal\u0131m: \u201c<em>Nas\u0131l bir kitapta bir konuyu ararken \u00f6nce index sayfas\u0131na bak\u0131p nerede oldu\u011funu \u00f6\u011freniyoruz ve direkt olarak o sayfalara eri\u015fiyoruz, veritabanlar\u0131nda da ayn\u0131 mant\u0131k ile \u00e7al\u0131\u015fan yap\u0131lard\u0131r. K\u0131saca hangi veri, nerede bilgisini verir bizlere. Aksi takdirde ayn\u0131 kitaplarda oldu\u011fu gibi b\u00fct\u00fcn tabloyu ba\u015ftan sona g\u00f6zden ge\u00e7irmemiz gerekir.<\/em>\u201d<\/p>\n\n\n\n<p>Yukar\u0131daki anlat\u0131lanlardan da anla\u015f\u0131laca\u011f\u0131 \u00fczere tablonuzda index var ise birka\u00e7 disk eri\u015fimi ile sorgunuzu tamamlarken, index olmayan durumlarda \u201cfull table scan\u201d denilen t\u00fcm tablonun okunmas\u0131 ka\u00e7\u0131n\u0131lmazd\u0131r. Disk eri\u015fimlerinin veritabanlar\u0131nda en yava\u015f kaynak oldu\u011funu hat\u0131rlatal\u0131m.<\/p>\n\n\n\n<p>Analizini yapt\u0131\u011f\u0131m\u0131z pek \u00e7ok SQL sunucuda index eksikliklerinden dolay\u0131 gereksiz performans kay\u0131plar\u0131n\u0131 g\u00f6rebiliyoruz. Ama bundan daha fazlas\u0131 gereksiz ve yanl\u0131\u015f kurgulanm\u0131\u015f index yap\u0131lar\u0131n\u0131n yaratt\u0131\u011f\u0131 sorunlar. \u201cIndex Tuning Wizard\u201d gibi ara\u00e7lar ile index gereksinimleri tespit edilip yarat\u0131l\u0131yor. Bu i\u015fin kolay k\u0131sm\u0131. Peki her ihtiya\u00e7 ger\u00e7ekten de gerekli mi? bunu sormak ise bizim i\u015fimiz.&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<h2>Index Yaratmadan \u00d6nce D\u00fc\u015f\u00fcn\u00fclecek 8 \u015eey:<\/h2>\n\n\n\n<h3>&nbsp;1-&nbsp;&nbsp;&nbsp;&nbsp;Tabloya G\u00f6re De\u011fil \u0130\u015f y\u00fck\u00fcne G\u00f6re \u0130ndex yarat\u0131lmal\u0131<\/h3>\n\n\n\n<p>&nbsp;Diyelim ki yeni bir tablo yaratt\u0131n\u0131z. Hemen index\u2019ler ne olsun diye sormak yanl\u0131\u015f. Zira bizim i\u00e7in m\u00fchim olan bu tabloda sorgulanacak olan alanlar\u0131n i\u00e7erikleri ve sorgulama say\u0131s\u0131 olacakt\u0131r.<\/p>\n\n\n\n<h2>2-&nbsp;&nbsp;&nbsp;Tablonun boyutlar\u0131<\/h2>\n\n\n\n<p>&nbsp;Yukar\u0131daki maddeye ekleme olsun, \u00f6zellikle parametre ya da tan\u0131m ama\u00e7l\u0131 kullan\u0131lan baz\u0131 ufak tablolara index yarat\u0131lmas\u0131 genelde gereksiz ka\u00e7abilir. Mesela bir disk okumas\u0131n\u0131 64K kabul eder isek, tablonun boyutuna g\u00f6re y\u00fczlerce kay\u0131d\u0131 zaten tek seferde okuyacakt\u0131r. \u0130ndex yarat\u0131lmas\u0131 durumunda hem index hemtablo okunaca\u011f\u0131 i\u00e7in 1 okuma yerine 2 okuma yap\u0131lm\u0131\u015f olacak.<\/p>\n\n\n\n<h2>3-&nbsp;&nbsp;&nbsp;\u00c7ok kullan\u0131lan sorgulara \u00f6ncelik<\/h2>\n\n\n\n<p>Tabloda index say\u0131s\u0131n\u0131 artt\u0131rmamak ad\u0131na mesela haftada 1 kere \u00e7al\u0131\u015f\u0131t\u0131r\u0131lan bir rapora ait sorgu yerine herg\u00fcn \u00e7al\u0131\u015fan bir sorguya index yarat\u0131lmas\u0131 daha uygun olacakt\u0131r. Tabii haftada bir \u00e7al\u0131\u015fan sorguyu \u00e7al\u0131\u015ft\u0131ran genel m\u00fcd\u00fcr\u00fcn\u00fcz ise o ayr\u0131.<\/p>\n\n\n\n<h2>4-&nbsp;&nbsp;&nbsp;&#8220;Cardinality&#8221; yani verideki \u00e7e\u015fit say\u0131s\u0131<\/h2>\n\n\n\n<p>&nbsp;\u0130ndex yarat\u0131l\u0131rken o kolon kendi i\u00e7erisinde ne derece farkl\u0131 bilgiler ta\u015f\u0131yor ise o kadar fazla performans art\u0131\u015f\u0131na neden olur. Bu nedenle tarih kolonlar\u0131 g\u00fczel index \u00f6rnekleri olabilir. 1 Milyon kay\u0131t olan tabloda tarih \u00fczerinden index yarat\u0131rsak yakla\u015f\u0131k 1Milyon index kay\u0131d\u0131m\u0131z da olur. Ama mesela cinsiyet kolonunda yarat\u0131lacak bir index\u2019ten ayn\u0131 performans\u0131 g\u00f6remeyiz zira yakla\u015f\u0131k 500Bin kay\u0131t tek index kay\u0131d\u0131 olarak kar\u015f\u0131m\u0131za \u00e7\u0131kacak.<\/p>\n\n\n\n<p>\u00d6rne\u011fin [cinsiyet + \u015fehir]&nbsp;kolonlar\u0131nda index yaratacak isek daha net bir eri\u015fim ad\u0131na index\u2019i [\u015eehir+ Cinsiyet] olarak yaratmak gerekir. Ne de olsa \u015fehir say\u0131s\u0131 cinsiyet say\u0131s\u0131ndan daha fazla<\/p>\n\n\n\n<h2>5-&nbsp;&nbsp;&nbsp;Sadece \u201cwhere\u201d k\u0131sm\u0131na de\u011fil \u201cSelect\u201d k\u0131sm\u0131na da bakmak gerekir<\/h2>\n\n\n\n<p><em>&nbsp;Select ad, soyad, sehir from table_name<\/em><\/p>\n\n\n\n<p><em>Where ad = \u2018omer\u2019 and soyad = \u2018Zeybek\u2019<\/em><\/p>\n\n\n\n<p>&nbsp;Sorgusunda e\u011fer ad ve soyad kolonlar\u0131 \u00fczerinde index var ise tablo direkt olarak kay\u0131da eri\u015fir ama \u015fehir bilgisi i\u00e7in tabloya da eri\u015fmek zorunda kal\u0131r. E\u011fer \u015eehir kolonunu da index\u2019e ekler ise bu ikinci eri\u015fime gerek kalmayacakt\u0131r. Bunu gene 1 Milyon kay\u0131tl\u0131 bir tablo i\u00e7in d\u00fc\u015f\u00fcn\u00fcrsek durum sadece 1 okuma fazla olmas\u0131n\u0131n olmad\u0131\u011f\u0131 net olarak anla\u015f\u0131l\u0131r. Tabii \u00f6ncesinde tablodaki index say\u0131s\u0131 ve bundan \u00f6nceki t\u00fcm maddelere de bakmak gerekir. Yoksa her sorgu i\u00e7in bir index yaratmak gibi sa\u00e7ma bir s\u00fcre\u00e7 ba\u015flar.<\/p>\n\n\n\n<h2>6-&nbsp;&nbsp;&nbsp;Index i\u00e7erisinde kolonlar\u0131n Update Edilme S\u0131kl\u0131\u011f\u0131<\/h2>\n\n\n\n<p>&nbsp;T\u00fcm update, Insert ve Delete i\u015flemlerinden sonra index alanlar\u0131 da g\u00fcncellenmek zorundad\u0131r. Bu \u00f6zellikle clustered index yap\u0131lar\u0131nda zorlay\u0131c\u0131 bir durumdur ayn\u0131 zamanda fragmantasyona da neden olur. Bu nedenle index kolonlar\u0131nda m\u00fcmk\u00fcn oldu\u011funca fazla g\u00fcncelleme olmamas\u0131na dikkat etmeliyiz. En iyisi index\u2019lerimiz ne kadar UPDATE alm\u0131\u015f diye kontrol etmek.<\/p>\n\n\n\n<h2>7-&nbsp;&nbsp;&nbsp;Sort ve Order By<\/h2>\n\n\n\n<p>&nbsp;Bu i\u015flemler CPU \u00fczerinde yo\u011funluk yaratacak i\u015flemler olacakt\u0131r. E\u011fer index say\u0131s\u0131 konusunda bir s\u0131k\u0131nt\u0131m\u0131z yok ise ve CPU tek sorunumuz ise s\u0131rf bu i\u015flemlerden kurtulmak i\u00e7in index yaratabiliriz.<\/p>\n\n\n\n<h2>8-&nbsp;&nbsp;&nbsp;Index\u2019lerin ayr\u0131 bir disk \u00fczerinde yarat\u0131lmas\u0131<\/h2>\n\n\n\n<p>&nbsp;\u00c7ok performansa ihtiyac\u0131 olan sistemler i\u00e7in d\u00fc\u015f\u00fcn\u00fclebilinir. Burada genelde bilinmeyeni s\u00f6yliyelim Clustered index\u2019leri ayr\u0131 bir diskte yaratmay\u0131n \ud83d\ude09&nbsp;<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p>K\u0131sacas\u0131 internette rahatl\u0131kla bulaca\u011f\u0131n\u0131z \u201changi Index\u2019leri Yaratmal\u0131y\u0131m?\u201d sorgular\u0131 ile ya da zaten SQL SERVER ile beraber gelen \u201cIndex Tuning Wizard\u201d yaz\u0131l\u0131mlar\u0131 le hangi index\u2019lere ihtiya\u00e7 oldu\u011funuzu \u00f6\u011frenmek ve yaratmak \u00e7ok kolay. Ama ger\u00e7ekten size fayda sa\u011flayacak Index\u2019leri ke\u015ffetmek daha derin bir analize ihtiya\u00e7 duyuyor.&nbsp;<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>T\u00fcm Relational Database&#8217;lerde oldu\u011fu gibi SQL Server&#8217;da performans art\u0131\u015f\u0131n\u0131n en b\u00fcy\u00fck destek\u00e7isi Index&#8217;lerdir. Index nedir? Ne i\u015fe yarar? Gibi sorulara burada cevap vermeyece\u011fiz. En az\u0131ndan bu bilgilere biraz a\u015fina olanlar\u0131n okumas\u0131 gereken bir yaz\u0131 olacak. Ama giri\u015f olmas\u0131 i\u00e7in her zaman verdi\u011fimiz \u00f6rne\u011fi burada da tekrarlam\u0131\u015f olal\u0131m: \u201cNas\u0131l bir kitapta bir konuyu ararken \u00f6nce index [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":436,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3],"tags":[],"_links":{"self":[{"href":"https:\/\/datarebus.com\/index.php\/wp-json\/wp\/v2\/posts\/676"}],"collection":[{"href":"https:\/\/datarebus.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/datarebus.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/datarebus.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/datarebus.com\/index.php\/wp-json\/wp\/v2\/comments?post=676"}],"version-history":[{"count":1,"href":"https:\/\/datarebus.com\/index.php\/wp-json\/wp\/v2\/posts\/676\/revisions"}],"predecessor-version":[{"id":677,"href":"https:\/\/datarebus.com\/index.php\/wp-json\/wp\/v2\/posts\/676\/revisions\/677"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/datarebus.com\/index.php\/wp-json\/wp\/v2\/media\/436"}],"wp:attachment":[{"href":"https:\/\/datarebus.com\/index.php\/wp-json\/wp\/v2\/media?parent=676"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/datarebus.com\/index.php\/wp-json\/wp\/v2\/categories?post=676"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/datarebus.com\/index.php\/wp-json\/wp\/v2\/tags?post=676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}